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

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

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

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

在 Python 中如果把函數(shù)定義寫(xiě)在調(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 語(yǔ)言中的函數(shù)調(diào)用需要提前聲明一般,例如在 C 語(yǔ)言中要調(diào)用后頭的定義的函數(shù)要寫(xiě)成

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

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

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

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

Python 源代碼是由上往下解釋的 找到程序入口(未包含在函數(shù)中的代碼) 即開(kāi)始執(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,我們來(lái)看上面的代碼

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

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

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

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

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

hello

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

也用http://pythontutor.com/live.html#mode=edit 來(lái)看看

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

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

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

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 硫化罐-胶管硫化罐-山东鑫泰鑫智能装备有限公司 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 京马网,京马建站,网站定制,营销型网站建设,东莞建站,东莞网站建设-首页-京马网 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 陕西自考报名_陕西自学考试网| 有福网(yofus.com)洗照片冲印,毕业聚会纪念册相册制作个性DIY平台 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 亚克隆,RNAi干扰检测,miRNA定量检测-上海基屹生物科技有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 罗氏牛血清白蛋白,罗氏己糖激酶-上海嵘崴达实业有限公司 | 飞象网 - 通信人每天必上的网站| 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 |