python之golbal/nonlocal


一、關鍵字

golbal nonlocal

在局部修改全局的變量為什么會報錯

count = 0

def func():
    count += 1
func()
# UnboundLocalError: local variable 'count' referenced before assignment
# 解釋器認為:如果你在局部作用域對一個變量進行修改了,你在局部作用域已經定義好這個變量了。

解釋器認為: 如果你在局部作用域對一個變量進行修改,name你在局部作用域已經定義好這個變量了。

1. global (***)

用途

  • 可以在局部作用域申明一個全局變量

例題

def func():
	global name # 用法
	name = 'alex'
	print(locals())
func()

# 總結
# 申明一個變量的方法:global name
  • 可以在局部修改一個全局變量

例題

count = 0

def func():
    global count
    count += 1

print(count)
func()
print(count)

# 輸出結果
0
1

總結:
# 程序從上往下執行,先定義一個局部變量count = 0,然后往下執行,到print(count),這時候count指向的還是0,到func()也就是變量名加括號,開始執行定義函數,進入函數內部,聲明count為全局變量,然后對count進行修改+1,跳出函數執行print(count),這個時候count已經+1操作,結果是1

2. nonlocal (了解)

用途

  • nonlocal不能操作全局變量
  • nonlocal 可以對父級作用域的變量進行修改,並且在當前作用域創建

例題

def func():
    count = 0
    def inner():
        nonlocal count
        count += 1
        print(count)
        print(locals())
    inner()
    print(locals())
func()


# UnboundLocalError: local variable 'count' referenced before assignment

# 在沒有申明一個nolocal的情況下,定義函數在子局部對父局部的變量進行修改也會報錯,原因如下:
# 解釋器認為:如果你在局部作用域對一個變量進行修改了,
# 你在局部作用域已經定義好這個變量了。

一句話總結

全局有count = 0 這個變量,或者在函數內部申明一個global count,此時在局部才可以對全局變量進行修改

# 正確的操作方法
count = 0
def func():
	global count
	count += 1
	return count
print(func())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM