4

好奇心のために...

ルビーの場合:

=>$ 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行でそれを行うことは可能ですか?

4

4 に答える 4

6

Python でまったく同じ、または非常に似たようなことができない理由は、Ruby ではすべてが式だからです。

Python はステートメントと式を区別し、式のみを評価できます (したがって、印刷されます。印刷演算子/関数に渡されることを意味します)。

したがって、そのようなコードは、あなたが示した形式で Python で実行することはできません。できることはすべて、上記のステートメントを Python 式として書き留める「類似の」方法を見つけることですが、その「Rubyous」ではないことは間違いありません。

私見、Python では、このような動作の不可能性 (このユースケースで説明されているように) は、「明示的は暗黙的よりも優れている」Zen of Python ルールにうまく従っています。

于 2012-09-04T13:39:55.410 に答える
2

同じ結果を生成するワンライナー:

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

于 2012-09-04T13:39:55.267 に答える
1

割り当てが保持されている他の回答で Python の式ではないという発言があれば、Python でこれを行うことができます。

from __future__ import print_function

[print(x) for x in range(0,42,2)]
于 2012-09-04T14:41:10.777 に答える
1

これは Python では不可能です。x += 2ステートメント ( ) を出力する式として使用することはできません。

于 2012-09-04T13:38:54.553 に答える