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

您的位置:首頁技術(shù)文章
文章詳情頁

解決Python 函數(shù)聲明先后順序出現(xiàn)的問題

瀏覽:4日期:2022-07-12 14:37:02

在 Python 中如果把函數(shù)定義寫在調(diào)用的下方可能會(huì)出錯(cuò),例如下面的代碼

foo()def foo(): print('hello')

執(zhí)行時(shí)會(huì)報(bào)出錯(cuò)誤

NameError: name ’foo’ is not defined

這時(shí)候要把 foo() 調(diào)用代碼放到該函數(shù)的聲明后面

def foo(): print('hello')foo()

這樣執(zhí)行就一切正常了。這仿佛像是 C 語言中的函數(shù)調(diào)用需要提前聲明一般,例如在 C 語言中要調(diào)用后頭的定義的函數(shù)要寫成

void foo(); int main() { foo();} void foo() { printf('Hello');}

實(shí)際上 Python 中并不存在函數(shù)提前聲明一說,也不能像 Java 那樣函數(shù)可以寫在任意位置,因?yàn)?Java 是編譯型的語言,Python 是解釋型的。

而且也不是一定要求被調(diào)用的函數(shù)一定要在源代碼層面上定義在調(diào)用者前方。

Python 中函數(shù)聲明的順序據(jù)我理解有兩條規(guī)則

Python 源代碼是由上往下解釋的 找到程序入口(未包含在函數(shù)中的代碼) 即開始執(zhí)行,執(zhí)行到的函數(shù)未被先行解釋到即報(bào)錯(cuò)

分析下面兩段代碼

def foo(): bar() if __name__ == ’__main__’: foo() def bar(): print('hello')

Python 從第 1 行一直解釋到第 4 行的入口,進(jìn)而往回跳,調(diào)用到第 1 行的 foo() 函數(shù),而其中的 bar() 函數(shù)還未及被解釋到,所以會(huì)提示

NameError: name ’bar’ is not define

有一個(gè)很好的分析工具 http://pythontutor.com/live.html#mode=edit,我們來看上面的代碼

解決Python 函數(shù)聲明先后順序出現(xiàn)的問題

解釋到第二行 bar() 的時(shí)候,Global frame 里只有 foo, bar 還不存在

如果把程序入口往后調(diào)

def foo(): bar() def bar(): print('hello') if __name__ == ’__main__’: foo()

上面代碼執(zhí)行無誤,輸出

hello

foo() 調(diào)用的 bar() 不也是在它下方聲明的嗎?所以這一點(diǎn)與 C 是有區(qū)別的。

也用http://pythontutor.com/live.html#mode=edit 來看看

解決Python 函數(shù)聲明先后順序出現(xiàn)的問題

解釋到第 8 行的時(shí)候在 Global frame 中 foo, bar 都有了,所以能成功調(diào)用。

這時(shí)候的理解是這樣的,Python 從第 1 行自上往下解釋到第 7 行的程序入口時(shí),foo() 并未實(shí)際調(diào)用 bar(),但 foo() 和 bar() 函數(shù)都已解釋到了,所以回過頭來 foo() 與 bar() 之間怎么調(diào)用都無妨。

因此,最好的實(shí)踐方法就是把程序的入口放到代碼的最下方,那么它前面的函數(shù)不管如何的聲明順序都沒有關(guān)系。

以上就是解決Python 函數(shù)聲明先后順序的問題的詳細(xì)內(nèi)容,更多關(guān)于python 函數(shù)聲明順序的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 飞飞影视_热门电影在线观看_影视大全| 引领中高档酒店加盟_含舍·美素酒店品牌官网 | 电机保护器-电动机综合保护器-上海硕吉电器有限公司 | 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 广州印刷厂_广州彩印厂-广州艺彩印务有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 挤出熔体泵_高温熔体泵_熔体出料泵_郑州海科熔体泵有限公司 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 广州云仓代发-昊哥云仓专业电商仓储托管外包代发货服务 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 联系我们-腾龙公司上分客服微信19116098882 | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 步入式高低温测试箱|海向仪器| 壹作文_中小学生优秀满分作文大全 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂 | 直齿驱动-新型回转驱动和回转支承解决方案提供商-不二传动 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 制样机-密封锤式破碎机-粉碎机-智能马弗炉-南昌科鑫制样 |