好奇心のために...
ルビーの場合:
=>$ 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で1行でそれを行うことは可能ですか?
好奇心のために...
ルビーの場合:
=>$ 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で1行でそれを行うことは可能ですか?
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 オブジェクト」を返す組み込み関数であり、すべてを保存せずに次のアイテムを生成します (そうです)。これは、OP のループrange
に非常に似ています。while
割り当てが保持されている他の回答で Python の式ではないという発言があれば、Python でこれを行うことができます。
from __future__ import print_function
[print(x) for x in range(0,42,2)]
これは Python では不可能です。x += 2
ステートメント ( ) を出力する式として使用することはできません。