【问题标题】:Python equivalent of Ruby's expression: "puts x += value"Python 等价于 Ruby 的表达式:“puts x += value”
【发布时间】:2012-08-29 04:25:57
【问题描述】:

为了好奇……

在 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 中在一行中做到这一点,如果可以,怎么做?

【问题讨论】:

  • 我不知道 ruby​​,但我想有朝一日学习(请原谅我的无知) -- 这与 range(4,40,2) 有何不同?还是等效的生成器函数?
  • 这里的关键是,正如其他人所回答的那样,ruby 允许将语句作为表达式运行,因此可以在更少的空间内完成更多的事情。我想知道是否有可能在 python 中实现类似的东西,只是为了好奇。

标签: python ruby language-comparisons


【解决方案1】:

之所以在 Python 中不能完全相同非常相似做到这一点,是因为在 Ruby 中,一切都是表达式。 p>

Python 语句和表达式之间的区别,并且只能计算表达式(因此打印,我的意思是传递给打印运算符/函数)。

所以这样的代码不能以您向我们展示的那种形式在 Python 中完成。您所能做的就是找到一些“类似”的方式将上面的语句写成 Python 表达式,但绝对不会是“Rubyous”。

恕我直言,在 Python 中,这种行为是不可能的(如本用例中所述),很好地遵循了 Python 规则的“显式胜于隐式”禅。

【讨论】:

  • 你答案的前两个段落解释了一切。我并不是想在 Python 中找到一种“Rubyous”的方式来做某事,我只是发现比较这两种语言很有启发性。有没有办法在 python 的一行中实现相同的循环?我从来没有在 python 中使用过这种表达式,但据我所知,我不能在 python 中这样做,所以我想知道是否有可能。
  • 不确定我是否理解您的 ZoP 参考。给定代码的隐含含义是什么?
【解决方案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 循环非常相似。

【讨论】:

  • "for i in xrange(4,42,2): print i" 也
  • @nemesisdesign 更好:)
【解决方案3】:

这在 python 中是不可能的;您不能使用语句 (x += 2) 作为要打印的表达式。

【讨论】:

    【解决方案4】:

    在保留其他答案时,关于赋值不是 Python 中的表达式的评论, 可以在 Python 中做到这一点:

    from __future__ import print_function
    
    [print(x) for x in range(0,42,2)]
    

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2019-08-15
      • 2012-11-26
      • 1970-01-01
      • 2011-08-18
      • 2019-03-14
      相关资源
      最近更新 更多