如果函数要返回一系列结果,我们常见的方法就是将结果放到一份列表中,然后返回给调用者。比如下面的函数,返回字符串中每个单词的首字母在真个字符串中的索引:
运行结果:
上述的结果完全符合我们的预期,但 get_word_index 函数不够简洁。下面我们尝试使用生成器来实现:
运行结果:
改写之后,不仅运行结果符合要求,由于不需要和 result 列表交互,函数也变得非常简洁。下面我们就来详细学习下生成器吧~
生成器是指使用 yield 表达式的函数,调用生成器函数时,它并不会真的运行,而是会返回迭代器。每次在这个迭代器上面调用内置的 next 函数时,迭代器就会把生成器推进到下一个 yield 表达式那里。生成器传给 yield 的值均会由迭代器返回给调用者。
此外,如果输入量非常大,使用列表作为返回值,那么程序就有可能耗尽内存并崩溃。相反,使用生成器之后,则可以应对任意长度的输入数据。
例如,下面这个生成器函数可以获取文件中单词的索引,而不管文件内容多大,该函数执行时消耗的内存,只由单行的文本长度决定:
其中 test_generatortxt 中的内容如下:
运行结果:
下面这句话特别重要: 生成器函数返回的迭代器,是由状态的,及调用者不应该反复使用它 。我们那 word_index_iter 来说明:
如果想重复调用,请将其封装成容器:
运行结果:
关于上述自定义容器的实现原理,我的另外一篇文章做了详细介绍,链接奉上: >
猜单词 游戏 是一种简单的 游戏 ,
计算机从指定单词列表中抽取一个单词,通过算法,把单词的字母顺序打乱,然后输出给玩家猜测。
玩家根据乱序的字母,组合猜测输入正确的单词。计算机确定是否猜测正确。
使用元组或列表构建待猜测的英文单词库列表WORDS,使用random模块的choice函数从单词的元组中随机抽取一个英文单词word。
然后把该英文单词的字母乱序排列
方法:每次随机抽取一个位置的字符放入乱序的jumble字符串中,并从原word中删除该字符
游戏 一开始先显示乱序后的字符串jumble(语义化:混乱),并提示用户输入猜测的结果,如果错误,提示继续输入,直至输入正确。猜对之后,可以询问是否继续 游戏 。 游戏 也可以通过Ctr1+C强制中断运行。
读者也可以扩展程序,例如从文件中读入单词列表,记录 游戏 玩家的得分情况等。
word-guesspy
程序运行结果如下:
以上就是关于Python 函数 - 返回生成器全部的内容,包括:Python 函数 - 返回生成器、python中,怎么做个字典,数句子中单词出、Python实现猜单词游戏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)