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) как выражение для печати.

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