python 函式內修改全域性變數報錯原因

2021-10-24 11:37:31 字數 531 閱讀 2271

原因一:

(1)這樣很容易歧義,對於同乙個名字它要麼是區域性變數,要麼是全域性變數,不能是兼而有之

(2)直譯器的規則是以賦值語句劃分,如果乙個變數在**塊中被賦值,它就是當前**塊的區域性變數;否則看變數是否是外層函式的閉包變數,再看它是否只全域性變數,最後看它是否是內建名字空間裡的變數

(3) a += 1 是乙個典型的賦值語句,因此 a 一定是區域性變數。問題在於a還沒有賦值完成初始化,就被讀取來做加一計算,因此報錯

我的理解是:

人的想法可能是,程式逐行執行,然後第一句碰到 a+1 時,找到了全域性變數,然後再執行下一句賦值給 乙個區域性變數a。 是不是因為 直譯器事先定義函式時已經確定了,其中名字空間的 變數,發現有a的區域性變數被定義, 當下面再執行 這個函式的時候,output(),再進去執行這個函式的這個語句的時候,就會找到 本地的區域性變數a ,然後a+1 ,此時不使用全域性變數a,所以導致 提是,區域性變數a在定義之前被使用

python全域性變數在 函式中 修改

全域性變數的名字宣告在函式體中時,全域性變數的名字就被區域性變數覆蓋掉。全域性變數對於所有的函式,他們的值都是可以被訪問的。除非別刪除,不然一直活動到指令碼結束。區域性變數是暫時的。程式示例 var 200 1 def foo var 100 2 print var 3 結果是200,不是100。因...

python全域性變數的修改

舉個例子。外部函式定義了count變數,而後在內部函式中去使用並修改它。可以看到,我們可以列印它,但是不能修改它。原因python 不可變變數 比如str,int,double,tuple這些 如果在外部函式申明,那麼內部只能使用不能修改,如果想要修改只能在外部申明的時候加上global關鍵字,在使...

函式中「引用」全域性變數和「修改」全域性變數的差別

以下程式中,函式中可以直接列印出全域性變數x,而無須使用關鍵字global html view plain copy print?x 1 def run print x if name main run 當在函式中需要修改全域性變數時,如果沒有global關鍵字則會出錯 python view pl...