Найти - Пользователи
Полная версия: Посмотреть простанство имён вызывающего контекста
Начало » Python для экспертов » Посмотреть простанство имён вызывающего контекста
1 2
alien308
Посмотрел inspect, понял что ничего не понимаю. Если кому не трудно покажите пример.
doza_and
Так вы сначала покажите пример что вы хотите сделать. Вот типа функция вот так вызываю - вот недоволен что большой список аргументов вот в этом месте. А иначе что вам показывать? Пардон не глянул выше…
alien308
Есть переменная dx, хочу чтобы при вызове функции minim(a, b, y) из функции minim получить доступ к переменной dx. Причём если она не определена в локальном пространстве имён вызывающего контекста, то подставить значение по умолчанию.
Shaman
  
import inspect
 
def test():
    return inspect.stack()[1][0].f_locals
 
def container():
    variable = 123
    print test()['variable']
     
container()
doza_and
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)
Shaman
Глянул код
alien308
Хочу чтобы параметры волшебством передавались.
Нет, в таком варианте лучше по-человечески.
Rodegast
> Придётся костыли использовать - передавать эти данные как атрибуты функции.

Ты так получишь грязную функцию. Лучше используй каррирование:
 >>> def getFoo(x, y):
...     def foo(z):
...         print x, y, z
...     return foo
>>> foo = getFoo(1, 2)
>>> foo(3)
1 2 3
alien308
Всем большое спасибо! Смотрю предложенные решения. На данном этапе решил, как советовали, использовать классы. Получится очевидный код с чистыми функциями и не надо смотреть, чтобы себе чего-нибудь не отдавить.

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

Чудо какое! Всё чисто, а функцианальность обеспечивается. Теперь я понял, что такое каррирование в действии!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB