Python locals()和globals()是一样的吗?
发布时间:2020-12-20 11:34:33 所属栏目:Python 来源:网络整理
导读:我正在搞乱局部和全局命名空间,我发现了一些奇怪的行为.如果我这样做…… len(globals().keys())len(locals().keys()) 我得到两个不同的结果,首先我得到344然后我得到346.因此,出于好奇的缘故,我想知道哪些键在我的本地但不在我的全局,所以我这样做. [key fo
我正在搞乱局部和全局命名空间,我发现了一些奇怪的行为.如果我这样做……
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,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,3) ['a','c','b'] 所以,总结:是的,locals()== globals() – 但仅限于模块级别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |