程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python系列教程189——global和nolocal

編輯:Python

朋友們,如需轉載請標明出處: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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved