通过全局变量遍历()字典

我(试图)在我的程序中使用globals()来迭代所有全局变量。这是我去一下吧:通过全局变量遍历()字典

for k, v in globals().iteritems(): 

function(k, v)

当然,在这样做时,我刚刚创建2个全局变量,kv。所以,我得到这个异常:

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

回到顶部