我正在将项目从python 2.7更新到python 3.6.
我有一个列表理解,查找在python 2.7中工作的本地变量.当我切换到使用全局变量时,它只适用于python 3.6.
下面是一个说明问题的玩具示例.
相关代码是:
(A,B,C) = (1,2,3)
myvars = ['A','B','C']
Run Code Online (Sandbox Code Playgroud)
如果我执行以下代码:
[locals().get(var) for var in myvars]
Run Code Online (Sandbox Code Playgroud)
python 3.6中的返回值是:
[None, None, None]
Run Code Online (Sandbox Code Playgroud)
但是,python 2.7中的返回值是:
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
如果我使用globals执行以下代码:
[globals().get(var) for var in myvars]
Run Code Online (Sandbox Code Playgroud)
然后我在python 2.7和3.6中得到相同的结果:
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么使用locals()的代码不再适用于python 3.6?
下面的代码适用于 Python 2,但不适用于 Python 3。有没有办法在 Python 3 中访问局部变量?或者这些情况的替代解决方案?
[('{name_var}_{i:02d}of{maxpg:02d}.{date_var}').format(i, **locals())
for i in range(start, end)]
Run Code Online (Sandbox Code Playgroud)
Python 3 中的错误:
关键错误:'local_var'
下面是上面的一个更简单的玩具示例(适用于 Python 2,但不适用于 3)
local_var = 'hello'
['{local_var}'.format(**locals()) for i in range(1)]
Run Code Online (Sandbox Code Playgroud)
Python 3 中的错误:
关键错误:'local_var'