【发布时间】:2020-12-09 13:17:45
【问题描述】:
我在一个函数上测试预定义的 dict 属性,我得到了一个我没想到的结果。考虑以下代码:
>>> def func():
x = 7
a = 0
print(func.__dict__)
>>> func()
{}
毕竟,我确实在函数的命名空间中定义了两个变量。那么为什么这些名字没有出现在函数的 dict 属性中呢?
【问题讨论】:
-
为什么应该 每个函数调用的局部变量在single函数对象的字典中?如果函数被调用两次,您希望
func.__dict__包含什么,例如通过嵌套还是并发? -
因为
func是一个带有__call__方法的对象。您可以致电dir(func)进行检查。在被调用之前,它对自己的身体一无所知。 -
函数执行过程中的本地命名空间不是函数实例命名空间。否则,你可以做
func.a,但你不能。无论如何,这是没有意义的,因为a在函数未执行时不存在
标签: python function dictionary scope namespaces