可以将计算放在 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次)。
我想确保 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次)。