电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python函數生成器原理及使用詳解

瀏覽:48日期:2022-08-02 15:15:11

1.python函數運行原理

import inspectframe = Nonedef foo(): bar()def bar(): global frame frame = inspect.currentframe() pass# python解釋器 python.exe 會用一個叫做PyEval_EvalFrameEx(c語言函數)去執行foo函數,首先會創建一個棧幀(stack frame),'''python在運行前會編譯成字節碼對象當foo調用bar函數進,又會創建一個棧幀,關鍵是所有的棧幀都是分配在堆內存, 堆內存有個特點,不手動釋放,就會一直存在這就決定了棧幀可以獨立于調用者存在.'''# import dis# print(dis.dis(foo)) # 查看foo函數的字節碼foo() #先調用一下foo函數 ,這個frame就有值.print(frame.f_code.co_name) # bar 查看這個棧幀, bar 所以還是可以拿到bar的棧幀,然后就可以調用bar函數caller_frame = frame.f_back # 當前frame棧幀的調用者的棧幀print(caller_frame.f_code.co_name) # foo , 也可以拿到bar函數的棧幀

python中函數的調用就是創建棧幀的過程,而這些創建的棧幀都是存放在堆上面,不釋放就永久存在,所以我們拿到每個函數對應的棧幀,就可以調用這個函數.

java就不行了,函數執行完畢,直接彈棧完蛋.

Python函數生成器原理及使用詳解

2.生成器執行原理

測試代碼

def gen_fun(): yield 1 name = ’admin’ yield 2 gender = ’male’ return 3

看看測試代碼對應的字節碼文件

0 LOAD_CONST1 (1)YIELD_VALUEPOP_TOP 6 LOAD_CONST2 (’admin’)STORE_FAST0 (name) 10 LOAD_CONST3 (2)YIELD_VALUEPOP_TOP 16 LOAD_CONST4 (’male’)STORE_FAST1 (gender) 20 LOAD_CONST5 (3)RETURN_VALUENone

測試gi_frame

# 在沒有執行生成器時print(gen.gi_frame.f_lasti) # -1 ,在沒有調用next方法迭代時,f_lasti 等于-1, 表示還沒開始呢print(gen.gi_frame.f_locals) # {}# 執行第一行next(gen)print(gen.gi_frame.f_lasti) # 2 # 執行一行next后,代碼停在了第二行,看上面字節碼文件print(gen.gi_frame.f_locals) # {}# 再執行一次next(gen)print(gen.gi_frame.f_lasti) # 12 # 又執行一次next之后,程序停在了12行print(gen.gi_frame.f_locals) # {’name’: ’admin’}

由上面的測試代碼可以知道,在生成器的gi_frame對象中維護著兩個重要的屬性f_lasti和f_locals.

f_lasti記錄著當前代碼運行到哪一行了(注意這里的那一行是指編譯之后的字節碼文件)

f_locals維護著當前生成器中的屬性字段

有了這兩個屬性,生成器就知道下一次next從哪兒開始執行了....

Python函數生成器原理及使用詳解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 加中寰球移民官网-美国移民公司,移民机构,移民中介,移民咨询,投资移民 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 小小作文网_中小学优秀作文范文大全| 广东教师资格网-广东教师资格证考试网 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 江苏农村商业银行招聘网_2024江苏农商行考试指南_江苏农商行校园招聘 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 聚合甘油__盐城市飞龙油脂有限公司 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 精密模具-双色注塑模具加工-深圳铭洋宇通 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司| 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 地磅-地秤-江阴/无锡地磅-江阴天亿计量设备有限公司_ | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 滑石粉,滑石粉厂家,超细滑石粉-莱州圣凯滑石有限公司 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 |