python有趣的 全局和局部变量

def test():
	print(apple)
	apple = 'apple'

apple = 'global apple'
test()

运行这个程序会报错,因为apple虽然在apple = 'global apple'语句中,定义为全局变量,但是由于在test函数中,有一个apple的局部变量,即使在该局部变量的赋值语句在print之后,python也会在print执行前,看到局部变量apple,结果python就认为在test中,apple是局部变量,而在 print(apple)的执行在 apple 赋值之前,局部变量 apple 并不存在,所以就会报如下错误:

UnboundLocalError: local variable 'apple' referenced before assignment

也就是说test函数中使用了局部变量apple,不管有没有运行到apple的赋值语句,都会屏蔽掉全局变量

def test():
	global apple 
	apple = 'apple'

print(apple)
test()

运行这个程序也会报错,错误信息如下:

NameError: name 'apple' is not defined

也就是说print中的apple没有定义,但是如果把test和print函数调换一下位置,就可以正常运行了,因为在test函数的开始处,有针对 apple变量的 global 语句,也就相当于test中定义了apple,所以在函数中定义的全局变量,只有在该函数运行结束,才是有效的,运行后全局可用,运行前python看不到这个全局变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值