色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

解決Python 函數聲明先后順序出現的問題

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

在 Python 中如果把函數定義寫在調用的下方可能會出錯,例如下面的代碼

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

執行時會報出錯誤

NameError: name ’foo’ is not defined

這時候要把 foo() 調用代碼放到該函數的聲明后面

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

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

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

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

而且也不是一定要求被調用的函數一定要在源代碼層面上定義在調用者前方。

Python 中函數聲明的順序據我理解有兩條規則

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

分析下面兩段代碼

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

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

NameError: name ’bar’ is not define

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

解決Python 函數聲明先后順序出現的問題

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

如果把程序入口往后調

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

上面代碼執行無誤,輸出

hello

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

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

解決Python 函數聲明先后順序出現的問題

解釋到第 8 行的時候在 Global frame 中 foo, bar 都有了,所以能成功調用。

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

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

以上就是解決Python 函數聲明先后順序的問題的詳細內容,更多關于python 函數聲明順序的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 波多野结衣在线视频免费观看 | 午夜限制r级噜噜片一区二区 | 国内国外精品一区二区 | 国产成人亚洲综合91精品555 | 自拍视频精品 | 欧美日韩日本国产 | 欧美一级毛片欧美一级无片 | 国产精品.com| 一级大黄美女免费播放 | 波多野结衣中文一区二区免费 | 永久黄网站色视频免费网站 | 国语一级毛片 | 亚洲社区在线观看 | 中文乱码字幕午夜无线观看 | 亚洲精品久久一区影院 | 欧美日本俄罗斯一级毛片 | 免费看一级欧美毛片视频 | 好看的看黄a大片爽爽影院 好男人天堂网 | 伊人婷婷色香五月综合缴激情 | 午夜在线社区视频 | 久久国产精品免费看 | 日本特级黄毛片毛片视频 | 99九九视频 | 黄色毛片子 | 精品久久香蕉国产线看观看亚洲 | 国产女厕偷窥系列在线视频 | 亚洲男人的天堂久久香蕉网 | 国产免费久久精品99 | 欧美大片一级毛片 | 国产欧美成人不卡视频 | 国内精自线一二区 | 国产精品视频视频久久 | 自拍偷自拍亚洲精品一区 | 一级片欧美 | 最新国产午夜精品视频成人 | 日韩不卡一级毛片免费 | 特级毛片aaaa级毛片免费 | 99视频九九精品视频在线观看 | 国产一级一级一级成人毛片 | 久久久国产99久久国产首页 | 亚洲网站在线观看 |