【问题标题】:Strange python for syntax, how does this work, whats it called?奇怪的python语法,它是如何工作的,它叫什么?
【发布时间】:2011-08-25 05:57:42
【问题描述】:
print max(3 for i in range(4))
#output is 3

使用 Python 2.6

3 让我失望了,这是我试图解释发生了什么的尝试。

for i in range(4) 使循环循环 4 次,在每个循环开始时将 i 从 0 递增到 3。 [不知道 3 在这种情况下是什么意思...] max() 返回传递给它的最大可迭代对象,并将结果打印到屏幕上。

【问题讨论】:

  • 出于某种原因,这个问题让我想起了巨蟒和圣杯。

标签: python generator-expression


【解决方案1】:

计算结果为:

print max([3,3,3,3])

...这是print 3 的精巧表达方式。

expr for x in xs 是一个生成器表达式。通常,您会在expr 中使用x。例如:

[2*i for i in range(4)] #=> [0, 2, 4, 6]

【讨论】:

  • 那么,那里的 3 表示“循环执行 3 次”?似乎是一件很奇怪的事情,必须进行实验。
  • 不,3 是每次循环循环时添加到列表中的内容。因此,对于 range(4) 中的第一个数字,即 0,添加数字 3……然后对于下一个数字,添加数字 3,再添加下一个,再添加下一个。所以你最终得到了一个包含四个三的列表。
  • ahhhh 所以'这里是 3,把它当作我'
  • 小心:实际上它的计算结果为:print max(iter([3,3,3,3])) 鉴于它是生成器表达式而不是列表推导式。
【解决方案2】:

3 for i in range(4) 是一个生成器,它连续四次产生 3,max 接受一个可迭代对象并返回具有最高值的元素,显然这里是三个。

【讨论】:

    【解决方案3】:

    可以改写为:

    nums = []
    for i in range(4):
        nums.append(3)
    print max(nums) # 3! Hurrah!
    

    我希望这让它的无意义更加明显。

    【讨论】:

      【解决方案4】:

      表达式:

      print max(3 for i in range(4))
      

      正在打印max() 函数的结果,应用于括号内的内容。然而,在括号内,你有一个 generator 表达式创建类似于数组的东西,所有元素都等于3,但比表达式更有效:

      print max([3 for i in range(4)])
      

      这将创建一个3s 数组,并在不再需要后销毁它。

      基本上:因为在括号内您将只创建相等的值,并且max() 函数返回最大的值,所以您不需要创建多个元素。因为元素的数量总是等于 1,所以不需要 max() 函数,并且您的代码可以被以下代码有效地替换(至少在您给出的情况下):

      print 3
      

      仅此而已;)

      要详细了解 comprehensiongenerator 表达式之间的差异,您可以访问此documentation page

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        • 2021-03-10
        • 1970-01-01
        • 2020-08-05
        相关资源
        最近更新 更多