Documentation表示声明的类的主体大致执行exec(body, globals(), namespace)
。不过,以下代码会引发NameError
(global name 'r' is not defined
)
class Test:
r = 3
l = [i + r for i in range(r)]
,而以下代码以预期结果成功
class Test:
r = 3
l = []
for i in range(r):
l.append(i + r)
此外,以下代码也会成功,并带有预期结果
code = """r = 3; l = [i + r for i in range(r)]"""
namespace = {}
exec(code, globals(), namespace)
列表理解的特点是什么使第一个代码引发错误?有没有办法解决这个问题,但仍然保持列表理解风格?