国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

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

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

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

執(zhí)行時會報出錯誤

NameError: name ’foo’ is not defined

這時候要把 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');}

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

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

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

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

分析下面兩段代碼

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

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

NameError: name ’bar’ is not define

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

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

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

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

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

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

hello

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

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

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

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

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

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

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

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产偷怕自拍 | 国产精品日韩欧美一区二区 | 久久久久国产午夜 | 国产二区自拍 | 中文字幕一级毛片 | 成人欧美一区二区三区黑人免费 | 欧美一区二区三区久久综合 | 免费一级a毛片在线播 | 欧美人成在线观看网站高清 | 国产黄色在线网站 | 国产麻豆福利a v在线播放 | 国产99视频在线 | 91av观看| 亚洲精品欧洲久久婷婷99 | 91成人免费版 | 亚洲国产剧情在线精品视 | 日本天堂视频在线观看 | 欧美精品国产一区二区三区 | 在线免费观看精品 | 欧美一级毛片在线一看 | 午夜三级a三级三点在线观看 | 三级黄色在线观看 | 国产精品亚洲二区 | 另类二区三四 | 精品免费久久久久久成人影院 | 自拍视频在线观看视频精品 | 日韩中文字幕精品一区在线 | 国产成人欧美视频在线 | 国产精品成人免费综合 | 久久九九久精品国产 | 美女叉开腿让男人捅 | 国产精品日韩 | 99爱在线视频这里只有精品 | 视频日韩| 蜜臀91精品国产高清在线观看 | 欧美一区高清 | 久久精品视频2 | 手机看片手机在线看片 | 成年人视频免费网站 | 欧美特黄一级aa毛片 | 玖玖色视频 |