国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用生成器來改寫直接返回列表的函數方法

2020-01-04 17:13:34
字體:
來源:轉載
供稿:網友

本文是一篇關于《Effective Python》書中一節的學習筆記,記錄了示例代碼和思路。

如果函數要產生一系列結果,那么最簡單的做法就是把這些結果都放在一個列表里返回。

比如我們要查出字符串中每個詞的首字母在整串字符串中的位置:

def index_word(text):  result=[]  if text:    result.append(0)  for index,letter in enumerate(text):    if letter == ' ':      result.append(index+1)  return result

該函數的使用:

  python,函數返回列表

這個函數思路很明了,但存在的問題在于代碼擁擠、冗余。返回前要把所有結果都放在列表里,如果輸入量巨大,則程序可能會耗盡內存發生崩潰。

這個函數改用生成器(generator)來寫會更好。可以對應任意長度的數據,不會影響到執行時所耗內存。

生成器是使用yield表達式的函數。調用生成器函數時,它并不會真的運行,而是會返回迭代器。每次在這個迭代器上面調用內置的next函數時,迭代器會把生成器推進到下一個yield表達式那里。生成器傳給yield的每一個值,都會由迭代器返回給調用者。

def index_word_iter(text):  if text:    yield 0  for index,letter in enumerate(text):    if letter == ' ':      yield index+1

python,函數返回列表

需要注意的是:函數返回的迭代器,只能產生一輪結果,如果繼續迭代第二輪,是不會再有結果的。

以上這篇用生成器來改寫直接返回列表的函數方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清水县| 丹阳市| 滨海县| 天峻县| 运城市| 正安县| 巴南区| 舟山市| 寿阳县| 民乐县| 乐亭县| 嘉鱼县| 宜川县| 北京市| 阿克苏市| 孝感市| 贵阳市| 潼南县| 阆中市| 万山特区| 沁阳市| 宁城县| 平南县| 丹东市| 彭州市| 天水市| 屏南县| 曲靖市| 澄江县| 施秉县| 从化市| 禄丰县| 新密市| 广安市| 定远县| 天峻县| 民勤县| 台北县| 佛教| 繁昌县| 太白县|