是什么区别globals(),locals()和vars()?他们回报了什么?结果更新是否有用?
Eth*_*man 160
每个都返回一个字典:
globals() 始终返回模块名称空间的字典locals() 始终返回当前命名空间的字典vars()返回任一当前命名空间的字典(如果调用无参数)或所述参数的字典.locals并vars可以使用更多的解释.如果locals()被调用的函数内部它构造函数的命名空间的字典的那一刻,并返回它-任何进一步名称分配都不会反映在返回的字典,任何分配到字典中都不会反映在实际本地命名空间:
def test():
a = 1
b = 2
huh = locals()
c = 3
print(huh)
huh['d'] = 4
print(d)
Run Code Online (Sandbox Code Playgroud)
给我们:
{'a': 1, 'b': 2}
Traceback (most recent call last):
File "test.py", line 30, in <module>
test()
File "test.py", line 26, in test
print(d)
NameError: global name 'd' is not defined
Run Code Online (Sandbox Code Playgroud)
两个笔记:
exec "pass"在函数中添加一行来完成此工作.如果locals()被称为外函数返回实际的字典,它是当前的命名空间.命名空间进一步的变化被反映在字典中,并到词典中的变化被反映在名称空间:
class Test(object):
a = 'one'
b = 'two'
huh = locals()
c = 'three'
huh['d'] = 'four'
print huh
Run Code Online (Sandbox Code Playgroud)
给我们:
{
'a': 'one',
'b': 'two',
'c': 'three',
'd': 'four',
'huh': {...},
'__module__': '__main__',
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所说的一切locals()也是如此vars()......这就是区别: vars()接受一个对象作为它的参数,如果给它一个对象,它就会返回该__dict__对象的对象.如果该对象不是函数,则__dict__返回的是该对象的命名空间:
class Test(object):
a = 'one'
b = 'two'
def frobber(self):
print self.c
t = Test()
huh = vars(t)
huh['c'] = 'three'
t.frobber()
Run Code Online (Sandbox Code Playgroud)
这给了我们:
three
Run Code Online (Sandbox Code Playgroud)
如果对象是一个函数,你仍然得到它__dict__,但除非你做的很有趣和有趣的东西,它可能不是很有用:
def test():
a = 1
b = 2
print test.c
huh = vars(test) # these two lines are the same as 'test.c = 3'
huh['c'] = 3
test()
Run Code Online (Sandbox Code Playgroud)
这给了我们:
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49029 次 |
| 最近记录: |