gpt4 book ai didi

python - 为什么 globals() 在迭代过程中改变了大小?

转载 作者:行者123 更新时间:2023-12-04 07:23:10 24 4
gpt4 key购买 nike

如果使用以下代码打印globals()一一键值对:

for k, v in globals().items():
# dict(globals()) working
print(k, v)
会得到这样的运行时错误:

RuntimeError: dictionary changed size during iteration


我知道 dict(globals())可以卡住字典,所以没问题。
但我有点好奇迭代过程中到底发生了什么变化?执行函数是自己的吗?

最佳答案

当您使用 global().items() , items函数创建一对迭代器,命名为 kv ,这就是 python 说 dictionary changed size during iteration 的原因.
这是一个示例证明:

>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>> for k, v in globals().items():
pass

Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
for k, v in globals().items():
RuntimeError: dictionary changed size during iteration
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'k': '__name__', 'v': '__main__'}
>>>
请注意,在我调用 globals() 时出现错误之后它又包含 2 个值。

关于python - 为什么 globals() 在迭代过程中改变了大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68374159/

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