欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

實(shí)際上 Python 中并不存在函數(shù)提前聲明一說,也不能像 Java 那樣函數(shù)可以寫在任意位置,因?yàn)?Java 是編譯型的語言,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,我們來看上面的代碼

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

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

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

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

hello

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

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

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

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

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

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

相關(guān)文章

  • 一文教會(huì)你調(diào)整Matplotlib子圖的大小

    一文教會(huì)你調(diào)整Matplotlib子圖的大小

    Matplotlib的可以把很多張圖畫到一個(gè)顯示界面,這就設(shè)計(jì)到面板切分成一個(gè)一個(gè)子圖,下面這篇文章主要給大家介紹了關(guān)于調(diào)整Matplotlib子圖大小的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • python logging日志模塊的詳解

    python logging日志模塊的詳解

    這篇文章主要介紹了python logging日志模塊的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 深入理解Python虛擬機(jī)之進(jìn)程、線程和協(xié)程區(qū)別詳解

    深入理解Python虛擬機(jī)之進(jìn)程、線程和協(xié)程區(qū)別詳解

    在本篇文章當(dāng)中深入分析在 Python 當(dāng)中 進(jìn)程、線程和協(xié)程的區(qū)別,這三個(gè)概念會(huì)讓人非常迷惑,如果沒有深入了解這三者的實(shí)現(xiàn)原理,只是看一些文字說明,也很難理解,在本篇文章當(dāng)中我們將通過分析部分源代碼來詳細(xì)分析一下這三者根本的區(qū)別是什么,需要的朋友可以參考下
    2023-10-10
  • 在Python中如何傳遞任意數(shù)量的實(shí)參的示例代碼

    在Python中如何傳遞任意數(shù)量的實(shí)參的示例代碼

    這篇文章主要介紹了在Python中如何傳遞任意數(shù)量的實(shí)參的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python列表list內(nèi)建函數(shù)用法實(shí)例分析【insert、remove、index、pop等】

    Python列表list內(nèi)建函數(shù)用法實(shí)例分析【insert、remove、index、pop等】

    這篇文章主要介紹了Python列表list內(nèi)建函數(shù)用法,結(jié)合具體實(shí)例形式分析了list中insert、remove、index、pop等函數(shù)的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • python日志模塊loguru詳解

    python日志模塊loguru詳解

    大家好,本篇文章主要講的是python日志模塊loguru詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式

    Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式

    這篇文章主要介紹了Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • PyTorch清理CPU緩存的實(shí)現(xiàn)步驟

    PyTorch清理CPU緩存的實(shí)現(xiàn)步驟

    在使用PyTorch進(jìn)行深度學(xué)習(xí)時(shí),頻繁的數(shù)據(jù)和計(jì)算可能導(dǎo)致CPU緩存滿載,影響性能和內(nèi)存使用,適時(shí)清理CPU緩存有助于管理內(nèi)存占用,下面就來介紹一下如何使用
    2024-09-09
  • Python遍歷字典方式就實(shí)例詳解

    Python遍歷字典方式就實(shí)例詳解

    這篇文章主要介紹了Python遍歷字典方式就實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 如何利用Python處理excel表格中的數(shù)據(jù)

    如何利用Python處理excel表格中的數(shù)據(jù)

    Excel做為職場(chǎng)人最常用的辦公軟件,具有方便、快速、批量處理數(shù)據(jù)的特點(diǎn),下面這篇文章主要給大家介紹了關(guān)于如何利用Python處理excel表格中數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評(píng)論