У меня есть метод:Почему добавление скобок вокруг вызова доходности в генераторе позволяет компилировать/запускать?
@gen.coroutine
def my_func(x):
return 2 * x
в основном, торнадо сопрограмма.
Я составьте список таких как:
my_funcs = []
for x in range(0, 10):
f = yield my_func(x)
my_funcs.append(x)
В попытке сделать это список понимание, таких как:
my_funcs = [yield my_func(i) for i in range(0,10)]
Я понял, что это недопустимый синтаксис. Он turns out you can do this с использованием ()
вокруг выхода:
my_funcs = [(yield my_func(i)) for i in range(0,10)]
- Означает ли это поведение (синтаксис для обертывания
yield foo()
вызова(), таких как(yield foo())
, с тем чтобы это выше кодом для выполнения) имеют определенный тип имени ?- Это какая-то форма приоритета оператора с
yield
?
- Это какая-то форма приоритета оператора с
- Это поведение с
yield
документировано где-то?
Python 2.7.11 на OSX. Этот код действительно должен работать как в Python2/3, поэтому использование вышеприведенного списка не является хорошей идеей (см. here для почему, приведенный выше список работает в Python 2.7, но разбит на Python 3).
Из-за приоритета оператора. –
@MartijnPieters, но 'yield' является [не в документах Python2 с приоритетом оператора] (https://docs.python.org/2/reference/expressions.html#operator-precedence) - код типа' m = [foobar () для i в диапазоне (0, 10)] 'работает отлично и, как ожидалось. – enderland
@PadraicCunningham Я добавил пример того, почему в итоге я столкнулся со списком. – enderland