在Python中 globals(),locals()和vars()之间有什么区别? 在Python中获取方法参数名称 在Python中 globals(),locals()和vars()之间有什么区别? 每个都返回一个字典: globals() 始终返回模块名称空间的字典 locals() 始终返回当前命名空间的字典 vars()返回任一当前命名空间的字典(如果调用无参数)或所述参数的字典。 locals并vars可以使用更多的解释。如果locals()被调用的函数内部它构造函数的命名空间的字典的那一刻,并返回它-任何进一步名称分配都不会反映在返回的字典,任何分配到字典中都不会反映在实际本地命名空间: def test(): a = 1 b = 2 huh = locals() c = 3 print(huh) huh['d'] = 4 print(d) 给我们: {'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 两个说明: 此行为是CPython特定的 - 其他Pythons可能允许更新使其返回到本地名称空间 在CPython 2.x中,可以通过exec "pass"在函数中添加一行来完成这项工作。 如果locals()被称为外函数返回实际的字典,它是当前的命名空间。命名空间进一步的变化被反映在字典中,并到词典中的变化被反映在名称空间: class Test(object): a = 'one' b = 'two' huh = locals() c = 'three' huh['d'] = 'four' print huh 给我们: { 'a': 'one', 'b': 'two', 'c': 'three', 'd': 'four', 'huh': {...}, '__module__': '__main__', } 到目前为止,我所说的一切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() 输出: three 如果对象是一个函数,你仍然会得到它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() 输出: 3 在Python中获取方法参数名称