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())

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值