Выражения генератора питона в определениях классов
Я пишу простой класс в 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
что, по крайней мере, кажется более последовательным.