我(试图)在我的程序中使用globals()
遍历所有全局变量。我就是这么做的:
for k, v in globals().iteritems():
function(k, v)
当然,在这个过程中,我又创建了两个全局变量
k
和v
。所以我有个例外:RuntimeError: dictionary changed size during iteration
下面是我为解决这个问题所做的各种不成功的尝试:
# Attempt 1:
g = globals()
for k, v in globals().iteritems():
function(k, v)
# Attempt 2 (this one seems to work, but on closer inspection it duplicates
#the last item in the dictionary, because another reference is created to it):
k = v = None
for k, v in globals().iteritems():
function(k, v)
。。。。这样做会产生一个错误。
最佳答案
您使用的是iteritems()
,它在实时字典上迭代。您可以通过首先创建项的副本来轻松地避免这个问题;在Python 2中,只需使用globals().items()
:
for k, v in globals().items():
function(k, v)
在Python 3中,您将使用
list()
首先将所有项对具体化为一个列表:for k, v in list(globals().items()):
function(k, v)
这个列表永远不会大到成为一个问题;模块globals很少大于几十个项目。
如果您觉得即使是几十个元组也是一个问题,那么只为键创建一个列表:
for k in list(globals()): # python 2 and 3
function(k, globals()[k])
关于python - 遍历globals()字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47996181/