我经常发现我更喜欢写一个生成器表达式(例如,而不是创建一个空列表并附加到它之后)。但是,这意味着我需要将表达式放入函数中以进行调用。
当仅在代码的一部分中使用挂起函数或方法时,将其挂在别处会感到很混乱。
对于较短的生成器,我只需编写一个单行生成器表达式或列表推导即可,这很干净,没问题。
作为一个玩具示例:
def gen_test():
for i in range(10):
for j in range(20):
yield i * j
def main():
return sum(gen_test())
如果main()
实际上是类中的一个方法,则将gen_test()
提取到另一个函数或方法中会增加不必要的混乱,所以我很想:
def main():
def gen_test():
for i in range(10):
for j in range(20):
yield i * j
return sum(gen_test())
这比附加到列表要快:
def main():
vals = []
for i in range(10):
for j in range(20):
vals.append(i * j)
return sum(vals)
只有一个内部函数似乎很好,但是我经常为一个函数写一些〜4-6行生成器表达式。我还应该为每个函数编写一个内部函数吗?