【问题标题】:Is it ok to put computation in the body of the for loop? [duplicate]可以将计算放在 for 循环的主体中吗? [复制]
【发布时间】:2020-05-12 20:19:58
【问题描述】:

我想确保d1-d2 在第一个示例的每次迭代中都不会重新计算。我怎样才能检查这个?

>>> def f(d1: Counter, d2: Counter):
...     for reason, count in (d1 - d2).items():
...         print(reason, count)
...
>>> def f2(d1: Counter, d2: Counter):
...     diff = (d1 - d2).items()
...     for reason, count in diff:
...         print(reason, count)

任何建议哪种方式在可读性和性能方面更 Pythonic?

【问题讨论】:

  • 没有重新计算,第一种情况就ok了
  • 它们是等价的,取模一个临时变量。你选择哪一个是一个见仁见智的问题。
  • 这能回答你的问题吗? How does a for loop evaluate its argument

标签: python performance counter


【解决方案1】:

cmets 已经解释过没关系。您还询问“如何检查”d1 - d2 没有被评估两次,这通过定义一个打印某些内容的函数相当简单。

def foo():
    print('foo')
    return range(5)

for n in foo():
    pass

这会输出foo 一次,这证明foo() 只被调用/评估了一次(而不是5 次)。

【讨论】:

  • 我们能否概括并说 Python 的 for 循环以 in 之后的表达式只执行一次的方式工作?
  • @dandan 这不是一个概括。完全一样的说法。
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多