我(尝试)globals()在我的程序中使用迭代所有全局变量.这就是我的方式:
for k, v in globals().iteritems():
function(k, v)
Run Code Online (Sandbox Code Playgroud)
当然,在这样做的过程中,我只创建了2个全局变量,k并且v.所以我得到了这个例外:
RuntimeError: dictionary changed size during iteration
Run Code Online (Sandbox Code Playgroud)
而且,以下是我解决问题的各种尝试失败:
# 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)
Run Code Online (Sandbox Code Playgroud)
我看过像这样的帖子处理同样的异常.这是不同的,因为无法为每个字典条目分配变量而不为其创建变量名称...这样做会引发错误.
您正在使用iteritems(),它遍历实时字典.您可以通过先创建项目的副本来轻松避免此问题; 在Python 2中使用globals().items():
for k, v in globals().items():
function(k, v)
Run Code Online (Sandbox Code Playgroud)
在Python 3中,您首先list()要将所有项目对实现为列表:
for k, v in list(globals().items()):
function(k, v)
Run Code Online (Sandbox Code Playgroud)
该清单永远不会成为一个问题; 模块全局变量很少大于几十个项目.
如果您觉得即使是几十个元组也是一个问题,那么只为密钥创建一个列表:
for k in list(globals()): # python 2 and 3
function(k, globals()[k])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |