通过全局变量遍历()字典
我(试图)在我的程序中使用globals()
来迭代所有全局变量。这是我去一下吧:通过全局变量遍历()字典
for k, v in globals().iteritems(): function(k, v)
当然,在这样做时,我刚刚创建2个全局变量,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)
我看到的帖子好像this具有相同的异常处理。这是不同的,因为没有办法为每个字典条目分配一个变量,而没有为它创建一个变量名......这样做会产生错误。
回答:
您正在使用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)
该列表将不会如此大到一个问题;模块全局变量很少大于几十个项目。
如果你觉得甚至几十元组是一个问题,然后创建仅用于密钥列表:
for k in list(globals()): # python 2 and 3 function(k, globals()[k])
以上是 通过全局变量遍历()字典 的全部内容, 来源链接: utcz.com/qa/266572.html