#Python3中 nonlocal 与 global 关键字解析

Python中 nonlocal 与 global 关键字解析

首先来说
python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量
1.global 关键字
global关键字用来在函数或其他局部作用域中使用全局变量。

money = 100
def getmoney(money):
    money -= 100  # money = money - 100
    print(money) 
    						#(输出)-50这里输出-50
    						#因为函数内部money传的值50 正常计算九尾-50
  							
print(getmoney(50))			#(输出)None		这里是因为函数并没有返回值
						#如在print(money)下一行价格return money 
						#则print(getmoney(50))	输出为-50

print(money)				#(输出)100 
			
			#函数内局部变量如果不声明全局变量,并且不修改全局变量,即如果不去定义
			#getmoney()内部的money为全局变量,则全局变量(外部的money)不会被修改

所以下面进行使用global 关键字:

money = 100
def getmoney():
    global money			#在这里定义money为全局变量,即函数内部作用为全局		
    money -= 50 
    print(money)			#(输出)50
    return money			#这里置于一个返回计算值money
print(getmoney())			#(输出)50 
							#因为有了return 返回的值,则输出,没有return则None
print(money)				#(输出)50   #因为全局变量作用

2.nonlocal关键字
首先,要明确 nonlocal 关键字是定义在闭包里面的,用来在函数或其他作用域中使用外层(非全局)变量。
使用 nonlocal 时,就声明了该变量不只在嵌套函数def getmoney(里面
才有效, 而是在整个大函数def func()里面都有效

def func():
    money = 100					#nonlocal定以后 调用

    def getmoney():
    
        nonlocal money			#定义外层变量
        money -= 100  
        print(money)

    def savemoney():
    
        nonlocal money				#定义外层变量
        money += 100
        print(money)

    return getmoney, savemoney


f = func()
print(f)		#(输出)(<function func.<locals>.getmoney at 0x000001E646F058C8>,
						<function func.<locals>.savemoney at 0x000001E646F05840>)
						函数地址
f[0]()			#(输出)0	#利用下标读取getmoney
f[1]()			#(输出)100	#利用下标读取savemoney

猜你喜欢

转载自blog.csdn.net/weixin_43097301/article/details/83154884
今日推荐