从函数外部设置可访问的Python函数变量

时间:2015-02-26 22:40:02

标签: python binding scope

我很好奇如何从函数对象外部分配变量。在我尝试之前,我想到我知道如何做到这一点。

>>> 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
唉,事实并非如此。在定义函数后,如何分配函数可访问的变量?这只是一种好奇心。没有理由(我能想到)不只是传递参数。

3 个答案:

答案 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