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

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

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

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

foo()

def foo():
 print("hello")

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

NameError: name 'foo' is not defined

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

def foo():
 print("hello")

foo()

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

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

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

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

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

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

分析下面兩段代碼

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

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

NameError: name 'bar' is not define

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

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

如果把程序入口往后調

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

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

hello

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

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

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

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

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

以上就是解決Python 函數(shù)聲明先后順序的問題的詳細內容,更多關于python 函數(shù)聲明順序的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

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

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

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

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

    Python與機器學習庫LightGBM使用詳解

    LightGBM是一種高效的梯度提升決策樹框架,以其快速訓練和高預測性能聞名,它通過直方圖算法和基于葉子生長策略優(yōu)化技術,能夠在大規(guī)模數(shù)據集上提供卓越性能,本文詳細介紹了如何使用LightGBM進行分類和回歸任務,包括模型構建、參數(shù)調整
    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ù)的相關知識,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2020-02-02
  • 基于Pygame實現(xiàn)簡單的貪吃蛇游戲

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

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

最新評論

栾川县| 山阳县| 西城区| 镇坪县| 南昌县| 克拉玛依市| 福贡县| 班戈县| 衡水市| 绥滨县| 五原县| 贵定县| 客服| 武清区| 金门县| 讷河市| 盘山县| 玛纳斯县| 白城市| 乐平市| 时尚| 湘阴县| 芮城县| 盐源县| 泉州市| 砚山县| 汶川县| 图们市| 墨脱县| 康平县| 博白县| 鄂托克旗| 河池市| 宁德市| 六盘水市| 邳州市| 南乐县| 曲周县| 同江市| 衢州市| 临朐县|