我很好奇如何从函数对象外部分配变量。在我尝试之前,我想到我知道如何做到这一点。
>>> 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
唉,事实并非如此。在定义函数后,如何分配函数可访问的变量?这只是一种好奇心。没有理由(我能想到)不只是传递参数。
答案 0 :(得分:0)
class Name:
def __init__(self):
self.x = None
def f(self):
print self.x
a = Name()
a.x = 'Value'
a.f()
输出
$ Value
答案 1 :(得分:0)
我发现了一种做我想要完成的事情的方法。我需要修改对象的字典:
>>> def f():
... print(x)
...
>>> f.__dict__['x'] = 2
>>> f()
2
答案 2 :(得分:0)
基本上,如果在主程序中定义变量,则可以使用global关键字来引用它。
bah = 1
def function():
global bah
bah = 2