在下面的代码中,我定义了一个具有变量 y 的函数 f。 我试图在函数外调用 f.y,但它抛出了错误。 但它允许我分配 f.y=11 甚至新属性 f.x=12。但调用 f() 不会更新 y。那么这个 f.y 或 f.x 附加到哪里。是否可以更改函数内的 y。
>>> def f():
... y = 10
... print y
...
>>> f.y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'y'
>>> f.y = 11
>>> f()
10
编辑:这也无济于事
>>> def f():
... f.y = 10
... print f.y
...
>>> f()
10
>>> f.y=11
>>> f()
10
>>
请您参考如下方法:
如果您能解释一下您要完成的目标,也许会更好。首先直接回答您的问题:
f 指的是您创建的 function 对象。您可以将属性分配给任何具有 __dict__ 属性的对象(即您使用 f.y=11 所做的事情)。继续检查 dir(f),您会看到它有一个 __dict__。它本质上是围绕普通 dict 的语法包装器,您通常可以通过执行类似
my_dict['y'] = 10
请注意,此 dict 与您在函数中定义的任何局部变量无关。通常,您根本不想这样做,而是在需要 dict 时支持显式 dict。当您确实想要使用此语法访问对象的 __dict__: 类时的情况。我在下面简要介绍了这一点。
现在,由于我认为您正在尝试重新发明轮子,所以我将尝试复习一下您可能应该 做的事情。由于我不知道您要做什么,所以我将使用散弹枪方法并尽可能多地涵盖我能想到的内容。
- 将其作为函数的参数,或者更好的是,将其作为 默认参数 提供给 f,您可以选择更改它。
def f(y=10):
print y
f()
#prints 10
f(y=11)
#prints 11
-从 f 返回你的值。这当然可以让您访问变量。基本的东西,但是..
def f(y=10):
return y
f()
Out[9]: 10
f(y=11)
Out[10]: 11
-使f成为类。这使您可以获取 f 的实例,并按照您认为合适的方式对其进行操作。
class F:
def __init__(self,y=10):
self.y = y
f1 = F()
f2 = F(y=11)
f1.y, f2.y
Out[17]: (10, 11)
-最后,全局变量。不要使用全局变量。
