Уведомления

Группа в Telegram: @pythonsu

#1 Июль 31, 2016 22:36:43

alien308
Зарегистрирован: 2012-06-23
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

Посмотрел inspect, понял что ничего не понимаю. Если кому не трудно покажите пример.

Офлайн

#2 Июль 31, 2016 22:46:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

Так вы сначала покажите пример что вы хотите сделать. Вот типа функция вот так вызываю - вот недоволен что большой список аргументов вот в этом месте. А иначе что вам показывать? Пардон не глянул выше…



Отредактировано doza_and (Июль 31, 2016 23:13:49)

Офлайн

#3 Июль 31, 2016 23:17:45

alien308
Зарегистрирован: 2012-06-23
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

Есть переменная dx, хочу чтобы при вызове функции minim(a, b, y) из функции minim получить доступ к переменной dx. Причём если она не определена в локальном пространстве имён вызывающего контекста, то подставить значение по умолчанию.

Офлайн

#4 Июль 31, 2016 23:22:32

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

  
import inspect
 
def test():
    return inspect.stack()[1][0].f_locals
 
def container():
    variable = 123
    print test()['variable']
     
container()

Офлайн

#5 Июль 31, 2016 23:27:20

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

alien308
Есть переменная dx,
Ок извиите долго тупил над вашим кодом.

Пока непонятно чем вас не устраивает
  #!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import scipy as sp
import math
from scipy.stats import genpareto
def minim(a, b, y,dx=0.1):
       ....
minim(a, b, f)
minim(a, b, f,dx=0.2)

Если лень набирать присвоения (но если вы просто будете выше писать dx=3 то писанины одинаковое количество)
 def f(x=3,y=5,**kvargs):
    print(x,y)
x=3.3
y=5.3
f(**locals())
>>> 
(3.3, 5.3)



Отредактировано doza_and (Июль 31, 2016 23:31:04)

Офлайн

#6 Июль 31, 2016 23:32:43

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

Глянул код

alien308
Хочу чтобы параметры волшебством передавались.
Нет, в таком варианте лучше по-человечески.

Офлайн

#7 Авг. 1, 2016 06:09:36

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2750
Репутация: +  184  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

> Придётся костыли использовать - передавать эти данные как атрибуты функции.

Ты так получишь грязную функцию. Лучше используй каррирование:

 >>> def getFoo(x, y):
...     def foo(z):
...         print x, y, z
...     return foo
>>> foo = getFoo(1, 2)
>>> foo(3)
1 2 3



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Авг. 1, 2016 15:16:41

alien308
Зарегистрирован: 2012-06-23
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Посмотреть простанство имён вызывающего контекста

Всем большое спасибо! Смотрю предложенные решения. На данном этапе решил, как советовали, использовать классы. Получится очевидный код с чистыми функциями и не надо смотреть, чтобы себе чего-нибудь не отдавить.

Rodegast
> Придётся костыли использовать - передавать эти данные как атрибуты функции.Ты так получишь грязную функцию. Лучше используй каррирование:

Чудо какое! Всё чисто, а функцианальность обеспечивается. Теперь я понял, что такое каррирование в действии!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version