最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年09月02日 11:49:09   作者:Yanbin  
這篇文章主要介紹了如何解決Python 函數(shù)聲明先后順序的問題,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

在 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,我們來看上面的代碼

解釋到第二行 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 來看看

解釋到第 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)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python opencv實現(xiàn)視頻與圖片的相互轉(zhuǎn)換

    使用Python opencv實現(xiàn)視頻與圖片的相互轉(zhuǎn)換

    這篇文章主要介紹了使用Python opencv實現(xiàn)視頻與圖片的相互轉(zhuǎn)換,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

    Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案

    這篇文章主要介紹了Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Numpy中的shape、reshape函數(shù)的區(qū)別

    Numpy中的shape、reshape函數(shù)的區(qū)別

    本文主要介紹了Numpy中的shape、reshape函數(shù)的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python與機器學(xué)習(xí)庫LightGBM使用詳解

    Python與機器學(xué)習(xí)庫LightGBM使用詳解

    LightGBM是一種高效的梯度提升決策樹框架,以其快速訓(xùn)練和高預(yù)測性能聞名,它通過直方圖算法和基于葉子生長策略優(yōu)化技術(shù),能夠在大規(guī)模數(shù)據(jù)集上提供卓越性能,本文詳細介紹了如何使用LightGBM進行分類和回歸任務(wù),包括模型構(gòu)建、參數(shù)調(diào)整
    2025-01-01
  • windows python3安裝Jupyter Notebooks教程

    windows python3安裝Jupyter Notebooks教程

    這篇文章主要介紹了windows python3安裝Jupyter Notebooks教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • DjangoWeb使用Datatable進行后端分頁的實現(xiàn)

    DjangoWeb使用Datatable進行后端分頁的實現(xiàn)

    這篇文章主要介紹了DjangoWeb使用Datatable進行后端分頁的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python安裝與卸載流程詳細步驟(圖解)

    Python安裝與卸載流程詳細步驟(圖解)

    這篇文章主要介紹了Python環(huán)境的安裝與卸載流程,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • tensorflow pb to tflite 精度下降詳解

    tensorflow pb to tflite 精度下降詳解

    這篇文章主要介紹了tensorflow pb to tflite 精度下降詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 使用 Python 遍歷目錄樹的方法

    使用 Python 遍歷目錄樹的方法

    這篇文章主要介紹了使用 Python 遍歷目錄樹的方法,文中給大家提到了Python os.walk() 函數(shù)的相關(guān)知識,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2020-02-02
  • 基于Pygame實現(xiàn)簡單的貪吃蛇游戲

    基于Pygame實現(xiàn)簡單的貪吃蛇游戲

    Pygame是一個專門用來開發(fā)游戲的Python模塊,主要用于開發(fā)、設(shè)計?2D?電子游戲。本文主要為大家介紹了通過Pygame制作一個簡單的貪吃蛇游戲,感興趣的同學(xué)可以關(guān)注一下
    2021-12-12

最新評論

潜江市| 泰州市| 莱芜市| 文水县| 古蔺县| 霸州市| 平泉县| 恩施市| 饶阳县| 雅安市| 广元市| 手游| 皮山县| 乐清市| 陵川县| 衡东县| 宁德市| 耿马| 泸溪县| 汕尾市| 黄骅市| 敦化市| 印江| 扎赉特旗| 上虞市| 柞水县| 北辰区| 保德县| 砚山县| 通化县| 荃湾区| 刚察县| 隆化县| 绥德县| 新竹县| 德格县| 左贡县| 隆德县| 湘西| 衡阳县| 浮山县|