天天看點

[Python學習] 專題六.局部變量、全局變量global、導入子產品變量

        定義在函數内的變量有局部作用域,在一個子產品中最進階别的變量有全局作用域。本文主要講述全局變量、局部變量和導入子產品變量的方法。

        參考:《python核心程式設計 (第二版)》

        聲明适用的程式的範圍被稱為了聲明的作用域。在一個過程中,如果名字在過程的聲明之内,它的出現即為過程的局部變量;否則出現即為非局部。例:

        輸出結果如下:

        在主塊中定義x=100,python使用函數聲明的形參傳遞x至foo()函數。foo()中把x指派為200,x是函數的局部變量;是以在函數内改變x的值,主塊中定義的x不受影響。

        核心筆記:

        當搜尋一個辨別符時,python先從局部作用域開始搜尋。如果在局部作用域内沒有找到那個名字,那麼一定會在全局域找到這個變量,否則會被抛出nameerror異常。

        作用域的概念和用于找到變量的名稱空間搜尋順序相關。當一個函數執行時,所有在局部命名空間的名字都在局部作用域内;當查找一個變量時,第一個被搜尋的名稱空間,如果沒有找到那個變量,那麼就可能找到同名的局部變量。

        全局變量的一個特征是除非删除掉,否則它們存活到腳本運作結束,且對于所有的函數,它們的值都是可以被通路的。然而局部變量,就像它們存放的棧,暫時地存在,僅僅隻依賴于定義它們的函數現階段是否處于活動。當一個函數調用出現時,其局部變量就進入聲明它們的作用域。在那一刻,一個新的局部變量名為那個對象建立了,一旦函數完成,架構被釋放,變量将會離開作用域。

        使用global語句定義全局變量。當使用全局變量同名的局部變量時要小心,如果将全局變量的名字聲明在一個函數體内,全局變量的名字能被局部變量給覆寫掉。是以,你應該盡量添加global語句,否則會使得程式的讀者不清楚這個變量在哪裡定義的。

        你可以使用同一個global語句指定多個全局變量。例如global x, y, z。

        當我在制作python爬蟲時,需要想函數中傳遞url,循環爬取每個url頁面的infobox,此時的檔案寫入操作就可以有兩種方法實作:1.通過傳遞參數file;2.通過定義全局變量file。

       ps:在此種用法中,如果我們在函數writeinfo()中不使用global 聲明全局變量source,其實也可以使用,但是此時應該是作為一個内部變量使用,由于沒有初始值,是以報錯。python查找變量是順序是:先局部變量,再全局變量。

        主要方法是通過在py檔案中子產品定義好變量,然後通過import導入全局變量并使用。例:

        輸出如下所示,全局變量結構是可以改變的。

        截圖如下所示:

[Python學習] 專題六.局部變量、全局變量global、導入子產品變量

ps:應該盡量避免使用全局變量。不同的子產品都可以自由的通路全局變量,可能會導緻全局變量的不可預知性。對全局變量,如果程式員甲修改了_a的值,程式員乙同時也要使用_a,這時可能導緻程式中的錯誤。這種錯誤是很難發現和更正的。同時,全局變量降低了函數或子產品之間的通用性,不同的函數或子產品都要依賴于全局變量。同樣,全局變量降低了代碼的可讀性,閱讀者可能并不知道調用的某個變量是全局變量,但某些情況不可避免的需要使用它。

        最後關于閉包和lambda(相當于函數)就不再介紹,希望文章對你有所幫助~同時今天也是中秋節,祝所有程式猿和讀者中秋節快樂。