簡體   English   中英

python函數中的全局和局部

[英]Global and local in python function

我無法理解python中的全局和局部變量,尤其是函數。 我看了很多示例,但是所有示例都沒有在函數調用中清楚地說明。 我的示例代碼如下:

def called(d):
    del d[0]
    b=[1]
    return b

def main():
    a=[0,1,2,3]
    print("first ", a)
    c=called(a)
    print("second ", a)

main()

輸出:

first  [0, 1, 2, 3]
second  [1, 2, 3]

我希望“ a”主要是局部變量。 當我調用“被調用”函數時,a復制到d。 d在“被叫”處是局部的。 但是現實是不同的。 我用“被稱為(a.copy)”解決了這個問題。 但我想了解邏輯。

當您將一個對象(Python中的所有對象都是一個對象)傳遞給函數時,Python不會隱式復制任何內容,而函數中所包含的對象就是傳入的對象,因此,如果您對其進行了更改,則更改將在函數外部看到。

OTHO,參數名稱是函數的局部變量,因此在函數內重新綁定參數只會更改該名稱指向函數內的對象,而對傳遞的對象沒有影響。

有關更深入的解釋,最佳參考是Ned Batchelder的文章

基本上,全局變量是一個可以在任何地方訪問的變量,而不管它是否在函數(或其他任何函數)中。

局部變量是僅存在於相關函數中的局部變量。 您無法在其他任何地方聲明或訪問它。 但是,您可以通過在函數中顯式包含它來使它成為全局的。

據我所知,'d'並沒有真正定義為變量,而是定義為函數參數,如named called(d) 如果您在函數內將d[0]也更改為blabla[0] ,則可以將其更改為called(blabla)並且函數的行為完全相同。

這意味着當您調用該函數時,其中任何帶有“ d”的東西都將被您所調用的東西所代替。 在這種情況下,參數已更改為變量a,然后按照您所說的執行函數。

為了定義變量,您必須使用'='。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM