В функциях python вполне допустимо ссылаться на переменные из окружающих областей.Эти переменные относятся к любому значению, которым они обладают в момент вызова функции.Так, например,
x = 1 # unused
def foo(y):
return x+y
x=10
print(foo(1)) # prints 11
x=11
print(foo(1)) # prints 12
можно ли заморозить переменную x
до значения x
, которое было во время создания?То есть я хочу, чтобы x
в foo
связывался со значением внешнего x
, а не с его именем.По сути, я хочу описать следующее поведение:
x = 1
def foo(y):
return 1+y # I'd rather not hard code the value of x here
x=10
print(foo(1)) # prints 2
x=11
print(foo(1)) # prints 2
У меня есть рабочее решение, но оно не очень читаемо, думаю, что может быть лучшее решение (возможно, декоратор?)
мое решение
x = 1
def wrapper():
local_x = x
def foo(y):
return local_x+y
return foo
foo = wrapper()
x=10
print(foo(1)) # prints 2
x=11
print(foo(1)) # prints 2