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

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

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

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

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

實(shí)際上 Python 中并不存在函數(shù)提前聲明一說(shuō),也不能像 Java 那樣函數(shù)可以寫在任意位置,因?yàn)?Java 是編譯型的語(yǔ)言,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,我們來(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)文章:
主站蜘蛛池模板: 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 聚合甘油__盐城市飞龙油脂有限公司| 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 今日扫码_溯源二维码_产品防伪一物一码_红包墙营销方案 | BOE画框屏-触摸一体机-触控查询一体机-触摸屏一体机价格-厂家直销-触发电子 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 户外环保不锈钢垃圾桶_标识标牌制作_园林公园椅厂家_花箱定制-北京汇众环艺 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 工作服定制,工作服定做,工作服厂家-卡珀职业服装(苏州)有限公司 | 智慧养老_居家养老_社区养老_杰佳通 | SRRC认证|CCC认证|CTA申请_IMEI|MAC地址注册-英利检测 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 20年条刷老厂-条刷-抛光-工业毛刷辊-惠众毛刷 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 芝麻黑-芝麻黑石材厂家-永峰石业| 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 广东青藤环境科技有限公司-水质检测 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 |