2012-09-04 48 views
3

爲了好奇......的Python相當於Ruby的表情: 「將X個+ =價值」

在Ruby:

=>$ 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中做到這一點,如果是的話如何?

+2

我不知道紅寶石,但我想了解某一天(所以原諒我的無知) - 這與「範圍(4,40,2)」有什麼不同?還是等效的發電機功能? – mgilson

+0

這裏的關鍵是,其他人已經回答了,ruby允許運行一個語句作爲表達式,所以更多的東西可以在更少的空間中完成。我想知道是否有可能在python中實現類似的功能,只是爲了好奇。 – nemesisdesign

回答

5

你之所以不能做到準確非常同樣在Python同樣是因爲在Ruby中,一切都表達

Python區分語句和表達式,只有表達式可以被評估(因此打印,我的意思是傳遞給打印操作符/函數)。

所以這樣的代碼不能用你向我們展示的形式在Python中完成。你所能做的一切就是找到一些「類似」的方式來將上面的語句寫成Python表達式,但它肯定不會是「Rubyous」。

恕我直言,在Python中,這種行爲是不可能的(如本用例所述),很好地遵循「明確優於隱含」的Python規則禪。

+0

你的答案的前兩個階段解釋了這一切。 我沒有試圖找到一種「Rubyous」方法來在Python中做某些事情,我只是發現比較這兩種語言頗具啓發性。有沒有辦法在Python中的一行中實現相同的循環?我從來沒有在python中使用這種表達式,但據我所知,我不能在python中這樣做,所以我想知道它是否可能以某種方式。 – nemesisdesign

+0

「,而x <40:x + = 2; print x;」例如... – nemesisdesign

+2

不知道我理解你的ZoP參考。關於給定代碼的含義是什麼? –

1

這在Python中是不可能的;您不能使用語句(x += 2)作爲要打印的表達式。

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對象」,其產生的下一個項目沒有內建將它們全部存儲起來(像range一樣),這與OP的while循環非常相似。

+0

「爲我在xrange(4,42,2):打印我」也 – nemesisdesign

+0

@nemesisdesign更好:) – zenpoy

1

隨着對分配新建分配FY沒有在Python上其他的答案是表達的言論不停, 一個可以在Python做到這一點:

from __future__ import print_function 

[print(x) for x in range(0,42,2)]