我正在搞乱局部和全局命名空间,我发现了一些奇怪的行为.如果我这样做……
len(globals().keys())
len(locals().keys())
我得到两个不同的结果,首先我得到344然后我得到346.因此,出于好奇的缘故,我想知道哪些键在我的本地但不在我的全局,所以我这样做.
[key for key in local().keys() if key not in globals().keys()]
而bam,没有,返回一个空列表.
想想也许我的代码有问题我试试这个.
g = [1,2,3,4]
l = [1,2,3,4,5,6]
[key for key in l if key not in g]
并按预期回报[5,6]
那么,Python无法区分locals()和globals()的键的原因是什么.
它与locals()== globals()和反之吗?
非常感谢.
最佳答案 那是因为在这种情况下,您在全局范围内调用本地人.尽管locals在当前范围内获取值,但globals返回全局范围中的所有值.这意味着如果您在全局范围内调用locals,它们将是相同的.例如,当您在非全局范围内调用本地时,会发现差异;把你的列表理解(这可以但是做一些修改)放到一个函数中:
>>> def example(a, b, c):
... return [k for k in locals().keys() if k not in globals()]
...
>>> example(1, 2, 3)
['a', 'c', 'b']
所以,总结:是的,locals()== globals() – 但仅限于模块级别.