可以将计算放在 for 循环的主体中吗?

Is it ok to put computation in the body of the for loop?

我想确保 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 吗?

评论里已经说明了没关系。你还问 "how to check" d1 - d2 没有计算两次,这很简单,只需定义一个打印内容的函数即可。

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

for n in foo():
    pass

这输出foo一次,证明foo()恰好是called/evaluated一次(而不是5次)。