2012-09-04 44 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)]