相关疑难解决方法(0)

使用列表推导查找变量适用于globals()但不适用于locals().为什么?

我正在将项目从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

10
推荐指数
2
解决办法
260
查看次数

无法在 Python 3 的列表理解中使用 locals() 吗?

下面的代码适用于 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'

python scope list-comprehension scoping python-3.x

7
推荐指数
1
解决办法
1301
查看次数

标签 统计

python ×2

list-comprehension ×1

python-3.x ×1

scope ×1

scoping ×1