在使用變量的時候,有時候會發生變量引用錯誤,或者程序運行完,程序得到的結果與預期存在差別。
記住一條原則:任何變量在使用前,都必須確保“變量引用是否明確”!
- 全局變量:作用域是整個腳本,除非被刪除掉,否則他們存活到腳本結束,且對於所有函數,他們的值是可以被訪問的。
- 局部變量:作用域侷限在定義的函數,依賴於函數現階段是否處於活動。當函數被調用時,局部變量進入聲明它們的作用域。一旦函數完成,變量將會離開其作用域。
我們來看一些例子:
(1)局部變量
函數內部的變量名如果第一次出現,且出現在“=”左邊,即被視爲定義一個局部變量。不管全局域中有沒有用到該變量名,函數中使用的將是局部變量。
ps:此處會報錯。因爲num
首先被當成了一個局部變量,到等號右側後發現這個變量還沒賦值就被用於計算,於是報錯。Num += 100
:這句話是有歧義的,num
既可以表示引用全局變量,也可以是創建一個新的局部變量。
在Python
中,默認創建局部變量並使用它,除非顯式聲明global
。
(2)函數內部使用全局變量
此時num2
引用的是全局變量中的num2
。此處是明確的,因爲把num2
當做一個局部變量的話,會報錯,只能是全局的num2
,故不需要聲明global
。
(3)函數內部修改全局變量
在函數中,如果想使用並修改到全局變量,則需要使用到global
(4)錯誤使用global
- 在
if __name__ == ‘__main__’
:中使用global
。
最好的直接解決這個問題的方法是把global聲明從 if __name__==’__main__’:
中刪除,在這裏是不需要聲明global
的。
因爲與其他語言不同,Python
中的if
語句不會再引入一個新的作用域(scope),任何變量分配的都是全局變量(global)。作爲一個全局變量,在使用變量名之前是不允許再一次聲明爲全局變量。
即if __name__==’__main__’:
中的變量都是全局的,所以在main
中間再一次聲明global
是錯誤的,所以系統會發出警告。
❤ thanks for watching, keep on updating...
點個贊再走吧