从函数外部设置可访问的 Python 函数变量
Setting an accessible Python function's variable from outside a function
我很好奇如何从函数对象外部分配变量。在尝试之前,我认为我知道如何做到。
>>> def f():
... print(x)
...
>>> f.x=2
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f
NameError: name 'x' is not defined
>>>
然后我尝试了:
>>> class c:
... def f(self):
... print(x)
...
>>> y=c();y.x=2;y.f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in f
NameError: name 'x' is not defined
同样的错误。现在,我想,这只是 有 工作:
>>> class c:
... def makef(self):
... return lambda x=x: print(x)
...
>>> y = c();y.x = 2;y.makef()()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in makef
NameError: name 'x' is not defined
唉,没有。定义函数后,如何分配函数可访问的变量?这只是一种好奇。真的没有理由(我能想到)不只是传递一个参数。
class Name:
def __init__(self):
self.x = None
def f(self):
print self.x
a = Name()
a.x = 'Value'
a.f()
输出
$ Value
我发现了一种完成我想要完成的事情的方法。我需要修改对象的字典:
>>> def f():
... print(x)
...
>>> f.__dict__['x'] = 2
>>> f()
2
基本上如果你在主程序中定义你的变量,你就可以使用全局关键字来引用它。
bah = 1
def function():
global bah
bah = 2
我很好奇如何从函数对象外部分配变量。在尝试之前,我认为我知道如何做到。
>>> def f():
... print(x)
...
>>> f.x=2
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f
NameError: name 'x' is not defined
>>>
然后我尝试了:
>>> class c:
... def f(self):
... print(x)
...
>>> y=c();y.x=2;y.f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in f
NameError: name 'x' is not defined
同样的错误。现在,我想,这只是 有 工作:
>>> class c:
... def makef(self):
... return lambda x=x: print(x)
...
>>> y = c();y.x = 2;y.makef()()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in makef
NameError: name 'x' is not defined
唉,没有。定义函数后,如何分配函数可访问的变量?这只是一种好奇。真的没有理由(我能想到)不只是传递一个参数。
class Name:
def __init__(self):
self.x = None
def f(self):
print self.x
a = Name()
a.x = 'Value'
a.f()
输出
$ Value
我发现了一种完成我想要完成的事情的方法。我需要修改对象的字典:
>>> def f():
... print(x)
...
>>> f.__dict__['x'] = 2
>>> f()
2
基本上如果你在主程序中定义你的变量,你就可以使用全局关键字来引用它。
bah = 1
def function():
global bah
bah = 2