Python基础——第九章 第二部分 函数作用域 全局变量global、局部变量nonlocal

在函数里面也有可以定义变量,那函数里面的变量名如果和函数外面的变量名重名,会相互影响吗?

1、作用域

1.1、外部不能访问函数内部变量

#外部不能访问内部变量

x=10
def func():
    y=1
func()
print(x)     '''执行结果:10'''
print(y)     '''执行结果:报错,提示'y'未被定义
                这里仅输出了函数外部x的值'''

1.2、函数内部能够访问函数外部变量

x = 123
def func():
	print(x)
	return x + 1
func()
'''执行结果: 123'''

1.3、函数内部不能修改外部变量

x = 123
def  func():
	x = x + 1
	return x
func()


'''UnboundLocalError: local variable 'x' referenced before assignment
这里x被定义为局部变量,仅只用函数内部,所以报错'''

1.4、函数内部和函数外部变量相同,访问内部变量

x = 100
print("执行结果:",x, id(x))
def  func():
	x = 999
	print("执行结果:",x, id(x))
	x += 1
	return x
a = func()
print("执行结果:",a,id(a))
'''
执行结果: 100 8791370633984
执行结果: 999 38956016

执行结果: 1000 38955984'''

#当函数外部变量(全局变量)和函数内部变量(局部变量)相同时,函数内部变量可以使用外部变量,但不可修改外部变量

#函数内部的变量,作用域只在函数内部,函数内部不可以直接更改函数外部的变量

这里提出一个问题,如果想要去修改外部变量呢?

2、golbal和nonlocal

2.1、golbal全局变量

函数内部如果需要改变全局变量,就需要使用global修饰变量

x = 100     #全局变量
print("执行结果:",x)
def  func():
	global x   #将局部变量修改成全局变量
	x += 1
	return x
a = func()
print("执行结果:",a)

'''
执行结果: 100
执行结果: 101'''

2.2、nonlocal局部变量

在函数嵌套函数的情况下,同样也有函数作用域的问题,但是python3中提供了方便,只需要使用nonlocal就可以在里层函数内部修改外部函数变量

x=11    #全局变量
def func():
	x=99  #局部变量
	def func2():
		nonlocal x  #将内层局部变量变成成外层局部变量
		x+=1
		return x
	return func2()
print("执行结果:",func())

猜你喜欢

转载自blog.csdn.net/weixin_44435602/article/details/115079974