gpt4 book ai didi

python - 带有自定义字典的 Eval() 在 CPython 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:05 24 4
gpt4 key购买 nike

<分区>

我正在尝试使用自定义字典作为全局变量来运行一些表达式。

class Namespace(dict):
def __getitem__(self, key):
if key == "y":
return 10
else:
return super(Namespace, self).__getitem__(key)

def run_with_dict(d):
print(eval("x + y", d))
print(eval("[ (p * y) for p in ['foo', 'bar'] ]", d))
print(eval("{ p: (p * y) for p in ['foo', 'bar'] }", d))

custom = Namespace()
custom["x"] = 2
regular = {"x": 2, "y": 10}

run_with_dict(regular)
run_with_dict(custom)

在 CPython 2.7 中运行它时,它仅在 map 理解上失败:

12
['foofoofoofoofoofoofoofoofoofoo', 'barbarbarbarbarbarbarbarbarbar']
{'foo': 'foofoofoofoofoofoofoofoofoofoo', 'bar': 'barbarbarbarbarbarbarbarbarbar'}
12
['foofoofoofoofoofoofoofoofoofoo', 'barbarbarbarbarbarbarbarbarbar']
Traceback (most recent call last):
File "<stdin>", line 22, in <module>
File "<stdin>", line 15, in run_with_dict
File "<string>", line 1, in <module>
File "<string>", line 1, in <dictcomp>
NameError: global name 'y' is not defined

但是当它与 PyPy 2.7 一起运行时,它工作正常。它也适用于任何 Python 3。

什么实现差异可以解释这一点?这是 CPython 2.7 中的错误还是未定义的行为?我能做些什么来让它在两种实现中都能正常工作吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com