"消耗整个可迭代的函数不会终止"?

Pyd*_*man 2 python yield generator

David Beazley关于发电机的讨论中,他指出,作为一个警告:

消耗整个可迭代的函数不会终止(min,max,sum,set等)

这是什么意思?

gen = (x*2 for x in [1,2,3,4,5])
Run Code Online (Sandbox Code Playgroud)

sum(gen) 终止就好了.

Jim*_*ard 5

他在无限序列的概念中提到了这一点,如果你为其他max人提供无限序列,他们根本就无法返回一个值.

想复制?除了建立一个自定义无限序列,Python有一个内置的一套这些在itertools(即repeat,count,cycle).尝试并做:

from itertools import repeat

max(repeat(20))
Run Code Online (Sandbox Code Playgroud)

看看会发生什么.实际上,不要这样做,max将继续咀嚼,因为repeat继续给予数字1.这是一个充满时间挑战并永不终止的爱情:-)


1 - 想象吃豆人在一条永无止境的直线上; 不断吃那些小黄色的东西.吃豆人= max,产生黄色的东西repeat.