Python эквивалент выражения Ruby: "ставит x += значение"
Ради любопытства...
В рубине:
=>$ irb
1.8.7 :001 > puts x = 2
2
=> nil
1.8.7 :002 > puts x += 2 while x < 40
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
Это довольно удобно.
Возможно ли сделать это в Python в одну строку, и если да, то как?
4 ответа
Причина, по которой вы не можете сделать то же самое или очень похожее в Python, заключается в том, что в Ruby все является выражением.
Python различает операторы и выражения, и только выражения могут быть оценены (поэтому напечатано, я имею в виду, передано оператору / функции печати).
Таким образом, такой код не может быть выполнен в Python в той форме, которую вы нам показали. Все, что вы можете сделать, - это найти какой-то "похожий" способ записать приведенное выше утверждение в виде выражения Python, но оно определенно не будет таким "Rubyous".
ИМХО, в Python, невозможность такого поведения (как описано в этом случае использования), хорошо следует "явное лучше, чем неявное" правило Zen of Python.
Однострочник для получения того же результата:
for x in xrange(4,42,2): print x
дает:
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
xrange - это встроенная функция, которая возвращает "объект xrange", который возвращает следующий элемент, не сохраняя их все (например, range
делает), это очень похоже на ОП while
петля.
С замечаниями о том, что присвоение не является выражением в Python для других сохраненных ответов, можно сделать это в Python:
from __future__ import print_function
[print(x) for x in range(0,42,2)]
Это невозможно в Python; Вы не можете использовать заявление (x += 2
) как выражение для печати.