__globals__
func_globals
对包含函数全局变量的字典的引用 - 定义函数的模块的全局命名空间。
只读
然而,修改该词典的工作正常。提到的Read-only
属性是否排除了不变性?
答案 0 :(得分:4)
首先,请注意func.func_globals
和func.__globals__
是对同一事物的两个引用:
在2.6版中更改:引入了双下划线属性
__closure__
,__code__
,__defaults__
和__globals__
作为别名相应的func_*
属性,用于向前兼容Python 3。
换句话说:
>>> def foo(bar):
pass
>>> foo.__globals__ is foo.func_globals
True
当它们被称为“只读”属性时,这是因为您无法重新分配属性:
>>> foo.__globals__ = {}
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
foo.__globals__ = {}
TypeError: readonly attribute
但是,返回的对象是可变的,因为它是一个字典。因此,可以向字典添加密钥并将其从中删除(尽管我建议您不要删除任何密钥,直到您确定知道自己在做什么为止!):
>>> foo.func_globals
{'__builtins__': <module '__builtin__' (built-in)>,
'__package__': None,
'__name__': '__main__',
'foo': <function foo at 0x02ED15F0>,
'__doc__': None}
>>> foo.func_globals['bar'] = 'baz'
>>> del foo.func_globals['__doc__']
>>> foo.func_globals
{'bar': 'baz',
'__builtins__': <module '__builtin__' (built-in)>,
'__package__': None,
'__name__': '__main__',
'foo': <function foo at 0x02ED15F0>}