Выражения генератора питона в определениях классов

Я пишу простой класс в Python 2.7.13, и я столкнулся с удивительной ошибкой:

class X(object):
    T = 'test {}'

    A1 = [x for x in T]  # ok
    A2 = tuple([x for x in T])  # ok
    A3 = tuple(x for x in T)  # ok

    B1 = [T.format(x) for x in (1,2)]  # ok
    B2 = tuple([T.format(x) for x in (1,2)])  # ok
    B3 = tuple(T.format(x) for x in (1,2))  # NameError

Все вышеперечисленное работает за исключением строки, определяющей B3, которая дает NameError: global name 'T' is not defined,

Мне любопытно, почему именно эта строка дает ошибку. Я писал tuple(...) как будто это было эквивалентно tuple([...]) но кажется, что они не одинаковы в конце концов.

Я также проверил, и Python 3.4.3 выдает ошибку в строках, определяющих B1, B2 а также B3 что, по крайней мере, кажется более последовательным.

0 ответов

Другие вопросы по тегам