python – 在dict理解中订阅locals()失败,KeyError
发布时间:2020-12-20 12:03:55 所属栏目:Python 来源:网络整理
导读:参见英文答案 Python dictionary comprehension using locals() gives KeyError????????????????????????????????????2个 我被Python locals()的奇怪行为所困惑. 基本上我想从字典理解中获取locals()字典中的一个项目,但它失败了.这是一个非常基本的事情,所
参见英文答案 >
Python dictionary comprehension using locals() gives KeyError????????????????????????????????????2个
我被Python locals()的奇怪行为所困惑. 基本上我想从字典理解中获取locals()字典中的一个项目,但它失败了.这是一个非常基本的事情,所以: >>> foo=123 >>> bar=345 >>> baz=678 >>> {k: locals()[k] for k in ('foo','bar','baz')} Traceback (most recent call last): File "<stdin>",line 1,in <module> File "<stdin>",in <dictcomp> KeyError: 'foo' >>> locals()['foo'] 123 >>> locale=locals() >>> {k: locale[k] for k in ('foo','baz')} {'foo': 123,'bar': 345,'baz': 678} >>> type(locals()) <class 'dict'> >>> def fun(): ... return {'foo': 123,'bar':345} ... >>> {k: fun()[k] for k in ('foo','bar')} {'foo': 123,'bar': 345} 在实际的一面,在dict或字符串.format()中的丑陋{‘foo’:foo,’bar’:bar}等工作正常. 解决方法
因为Python 3中的所有理解都是使用隐藏函数实现的,所以调用locals不会返回您期望返回的值.
您可以通过打印值来看到这一点: >>> _ = {k: print(locals()) for k in ('foo','baz')} {'k': 'foo','.0': <tuple_iterator object at 0x7fdf840afa90>} {'k': 'bar','.0': <tuple_iterator object at 0x7fdf840afa90>} {'k': 'baz','.0': <tuple_iterator object at 0x7fdf840afa90>} 像你一样将locals()分配给语言环境可以解决这个问题.你不是在理解中调用本地人. 请注意,在Python 2中,情况有点模糊. dict-comps以类似的方式失败但是list-comps,它早于dict-comps,工作得很好: >>> _ = [locals()[k] for k in ('foo','baz')] >>> _ [20,40,60] 这是另一个与W3相比为addressed的“疣”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |