执行类体

时间:2014-07-07 09:24:29

标签: python python-3.x

Documentation表示声明的类的主体大致执行exec(body, globals(), namespace)。不过,以下代码会引发NameErrorglobal 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)

列表理解的特点是什么使第一个代码引发错误?有没有办法解决这个问题,但仍然保持列表理解风格?

0 个答案:

没有答案