Python代码阅读合集介绍:为什么不建议Python初学者直接看项目源码?本文阅读的代码使用了初始化种子和迭代函数,初始化种子通过嵌套函数迭代,产生一个列表。本文阅读的代码片段来自30-seconds-of-python。unfolddefunfold(fn,seed):deffn_generator(val):whileTrue:val=fn(val[1])如果val==False:breakyieldval[0]return[iforiinfn_generator([None,seed])]#EXAMPLESf=lambdan:Falseifn>50else[-n,n+10]unfold(f,10)#[-10,-20,-30,-40,-50]展开函数接收一个迭代器函数和一个初始化种子,产生一个列表。迭代函数fn接受一个参数seed,并且必须始终返回一个包含两个元素的列表[value,nextSeed],或者返回False以终止生成器函数。unfold函数内部定义了生成器fn_generator。这个生成器使用一个while循环来调用迭代器函数并产生值,直到它返回False。最后使用列表理解返回生成器函数生成的列表。生成器是用于创建迭代器的简单而强大的工具。它像标准函数一样编写,但是当它们返回数据时,它们使用yield语句。每次在生成器上调用next()时,它都会从中断处继续执行(它会记住上次执行语句时的所有数据值)。fn_generator是一个生成器,在while语句的最后,使用yield返回当前while循环中val[0]的值。下次调用时,会继续下一个循环,在下一个循环中继续返回val[0]的值,直到迭代函数fn返回false结束while循环。在unfold函数的return语句中,利用listcomprehension不断调用fn_generator生成器,直到生成器退出循环,形成一个list返回。
