实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业

400-650-7353
您所在的位置:首頁(yè) > IT干貨資料 > python > 【Python基礎(chǔ)知識(shí)】Python生成器函數(shù)

【Python基礎(chǔ)知識(shí)】Python生成器函數(shù)

  • 發(fā)布: python培訓(xùn)
  • 來(lái)源:python干貨資料
  • 2020-11-06 15:33:33
  • 閱讀()
  • 分享
  • 手機(jī)端入口

對(duì)于程序而言,內(nèi)存也是很重要的,因?yàn)槌绦蛑泻芏鄶?shù)據(jù)都是保存在內(nèi)存中的,如果內(nèi)存中存儲(chǔ)的數(shù)據(jù)過(guò)多,那么系統(tǒng)就會(huì)崩潰,這是人們不希望發(fā)生的。

可以采用生成器推導(dǎo)式來(lái)解決內(nèi)存不足的問(wèn)題。例如,利用生成器推導(dǎo)式創(chuàng)建一個(gè)生成器n,數(shù)據(jù)為1~33數(shù)字,可以寫(xiě)成n = (i for i in range(1, 34))。這樣當(dāng)程序需要一個(gè)數(shù)時(shí),程序才生成數(shù)據(jù),可以節(jié)省內(nèi)存。然而生成器推導(dǎo)式太過(guò)簡(jiǎn)單,只能用一行代碼的形式實(shí)現(xiàn),如果要?jiǎng)?chuàng)建復(fù)雜的生成器,如創(chuàng)建一個(gè)生成器f,生成前10個(gè)斐波那契數(shù)字,生成器推導(dǎo)式已經(jīng)不能滿足需求了,因?yàn)殪巢瞧鯏?shù)列最開(kāi)始的兩個(gè)數(shù)都無(wú)法賦值。

函數(shù)可以實(shí)現(xiàn)復(fù)雜的功能,然而要節(jié)省內(nèi)存,就需要使用生成器函數(shù)。生成器函數(shù)與普通函數(shù)的區(qū)別是函數(shù)中包含關(guān)鍵字yield。實(shí)際上只要含有yield關(guān)鍵字的函數(shù)就是生成器函數(shù)。

生成器函數(shù)是用函數(shù)實(shí)現(xiàn)生成器。定義生成器函數(shù)的語(yǔ)法格式如下:

  1. >>> def fib():   # 定義生成器函數(shù) 
  2. ...     a, b = 11   # 定義初始值 
  3. ...     while True
  4. ...         yield a   # 暫停執(zhí)行,返回一個(gè)新變量值 
  5. ...         a, b = b, a+b 
  6. ... 
  7. >>> a= fib()   # 調(diào)用生成器函數(shù) 
  8. >>> for i in range(10): 
  9. ...     print(next(a))   # 調(diào)用生成器函數(shù)的yield生成值 
  10. ... 
  11. 1 
  12. 1 
  13. 2 
  14. 3 
  15. 5 
  16. 8 
  17. 13 
  18. 21 
  19. 34 
  20. 55 

def 函數(shù)名(參數(shù)):

函數(shù)體

yield 變量名

函數(shù)體

由語(yǔ)法格式可知,生成器函數(shù)與普通函數(shù)的區(qū)別在于函數(shù)體部分,生成器函數(shù)的函數(shù)體含有“yield 變量名”語(yǔ)句。yield的功能類(lèi)似于return,return是函數(shù)返回值,yield的功能也是返回變量,但是它僅返回變量而不退出函數(shù),因此,yield可以看作是多次返回變量且不會(huì)退出函數(shù)的return。

在調(diào)用生成器函數(shù)時(shí),寫(xiě)上函數(shù)名與參數(shù),并通過(guò)一個(gè)變量接收返回值,語(yǔ)法格式如下:

變量名 = 函數(shù)名(參數(shù))

調(diào)用生成器函數(shù)的yield生成值的第一種方法如下:

next(變量名)

第二種方法如下:

變量名.__next__()

在掌握了生成器函數(shù)的定義和調(diào)用之后,就可以使用生成器函數(shù)實(shí)現(xiàn)生成前10個(gè)斐波那契數(shù)字的案例了。這個(gè)案例主要分為三步,第一步是定義生成器函數(shù),第二步是調(diào)用并賦值,第三步是打印結(jié)果,代碼如下:

在上述程序中,首先定義生成器函數(shù)fib(),函數(shù)內(nèi)先定義斐波那契數(shù)列的兩個(gè)初始值,再寫(xiě)一個(gè)while True死循環(huán)。這個(gè)死循環(huán)有些特別,先是用yield生成待使用的數(shù)字,再通過(guò)賦值語(yǔ)句“a, b = b, a+b”將b的值賦給a,將a+b的值賦給b,每次循環(huán)都是如此。然后調(diào)用生成器函數(shù)fib(),再調(diào)用生成器函數(shù)的yield生成值,最后打印結(jié)果。由于需要生成前10個(gè)斐波那契數(shù)字,因此可以采用for循環(huán),每循環(huán)一次生成并打印一個(gè)斐波那契數(shù)字,共循環(huán)10次。第一次循環(huán)時(shí),調(diào)用yield生成值a,即1;第二次循環(huán)時(shí),調(diào)用yield生成值a,a被賦值成b的值,即1,而b被賦值成a+b的值,即2;第三次循環(huán)時(shí),調(diào)用yield生成值a,a被賦值成b的值,而此時(shí)b的值是上次賦值的a+b的值,即2……以此類(lèi)推,就得到了整個(gè)斐波那契數(shù)列。

如果對(duì)Python開(kāi)發(fā)感興趣或者想要深入學(xué)習(xí)的現(xiàn)在可以免費(fèi)領(lǐng)取學(xué)習(xí)大禮包哦(點(diǎn)擊領(lǐng)取80G課程資料 備注:領(lǐng)資料)。

文章“【Python基礎(chǔ)知識(shí)】Python生成器函數(shù)”已幫助

>>本文地址:http://www.jecan.cn/zhuanye/2020/59911.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測(cè)試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營(yíng)銷(xiāo)互聯(lián)網(wǎng)營(yíng)銷(xiāo)
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營(yíng)全域電商運(yùn)營(yíng)
  • 軟件測(cè)試軟件測(cè)試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁(yè)設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開(kāi)發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營(yíng)新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開(kāi)發(fā)智能機(jī)器人
 

快速通道fast track

近期開(kāi)班時(shí)間TIME

主站蜘蛛池模板: 电主轴,车床电磨头,变频制动电机-博山鸿达特种电机 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 我爱古诗词_古诗词名句赏析学习平台| 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 上海租奔驰_上海租商务车_上海租车网-矢昂汽车服务公司 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 金现代信息产业股份有限公司--数字化解决方案供应商 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 缝纫客 | led太阳能路灯厂家价格_风光互补庭院灯_农村市政工程路灯-中山华可路灯品牌 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 三板富 | 专注于新三板的第一垂直服务平台| 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 挨踢网-大家的导航!| 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 求是网 - 思想建党 理论强党| 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 上海质量认证办理中心| 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 铸铁平台,大理石平台专业生产厂家_河北-北重机械 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 |