函数变量的生命周期

#!/usr/bin/env python
#coding:utf-8
#@Author:Andy
# Date: 2017/6/14

# x = 1
# def foo():
# 	x =  10000
# 	print(x)
#
# foo()
# print(x)

运行上面的代码会先后打印出:10000, 1
执行foo函数后,x=10000的生命周期在foo函数内部,当此函数执行完后即消失,
接着执行print(x), 此时内部的x=10000已经销毁,只有全局变量x=1,所以打印1

 

x=1
def f():
	x = 2 # 生命周期在f
	def f2():
		x = 3 # 生命周期在f2
		def f3():
			nonlocal x # 会延伸到f2,限f2内部
			print(x)
			x = 4
		f3()
	f2()

f()

 此咱情况下最后打印的结果为3。
如果没有nonlocal x ,将会报错,因为nonlocal使得f3内部的x变量可以突破当前局部变量的限制
向上延伸到f2函数内部,如果f2内容仍没有找到x,那将继续到f内部,但仍然无法突破局部变量的限制,
无法延伸到全局变量的范围。但不能在nonlocal前面再定义一次x,那样将报错。

 

 

posted on 2017-09-18 20:03 Andy_963 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Andy963/p/7008873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值