朋友們,如需轉載請標明出處:https://blog.csdn.net/jiangjunshow
聲明:在人工智能技術教學期間,不少學生向我提一些python相關的問題,所以為了讓同學們掌握更多擴展知識更好地理解AI技術,我讓助理負責分享這套python系列教程,希望能幫到大家!由於這套python教程不是由我所寫,所以不如我的AI技術教學風趣幽默,學起來比較枯燥;但它的知識點還是講到位的了,也值得閱讀!想要學習AI技術的同學可以點擊跳轉到我的教學網站。PS:看不懂本篇文章的同學請先看前面的文章,循序漸進每天學一點就不會覺得難了!
1、global的作用
global的作用就是將變量聲明為全局變量
這個問題在面試中非常常見,經常會有面試官問,如下代碼打印結果是啥
var=10
def func():
var=var+20
print("inner:",var)
print(var)
func()
print(var)
分析:其實這段代碼真正執行的時候是會報錯的,提示在第三行的位置var未定義,這是因為第一行定義的var為全局變量,而在第三行中=右側的var為局部變量,此變量在函數局部內確實未定義,這就是這段代碼報錯的原因,解決這個問題的方法就是在第三行代碼之前,用global關鍵將var聲明為全局變量
如下:
var=10
def func():
global var
var=var+20
print("inner:",var)
print(var)
func()
print(var)
執行結果如下:
10
inner: 30
30
這裡需要記住的一個關鍵點是,全局變量在函數局部區域內,不能出現在賦值符號=的右側,但是如果沒有賦值符號,比如直接打印,這時又是可見的,如下:
var=10
def func():
print("inner:",var)
print(var)
func()
print(var)
執行結果為:
10
inner: 10
10
如果在函數局部區域內對和全局變量同名的變量重新賦值時,注意此時賦值的並不是全局變量,而是一個全新的局部變量,而全局變量並未發生變化,如下:
var=10
def func():
var=20
print("inner:",var)
print(var)
func()
print(var)
此時執行結果為:
10
inner: 20
10
2、nonlocal的作用
nonlocal的作用是聲明既不是全局變量,也不是局部變量
如下代碼,雖然使用global聲明var,但是代碼還是報錯的,這是因為這裡的var變量並不是全局變量,同時在最內層函數中也不是局部變量,在這種情況下就需要nonlocal關鍵字類聲明
def outer():
var=10
def inner():
global var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)
outer()
如下代碼:使用nonlocal聲明之後,就可以正常執行了,這就是nonlocal關鍵字的作用
def outer():
var=10
def inner():
nonlocal var
var=var+20
print("in inner:",var)
print(var)
inner()
print(var)
outer()
執行結果如下:
10
in inner: 30
30