python-内嵌函数和闭包

1 内嵌函数(内部函数)

在函数体内定义函数

1.1 实例 在a()函数里定义b函数

# 定义a()函数
	def a():
		print('a()函数')
		# 定义b()函数
		def b():
			print('b()函数')
		# 调用b()函数
		b()
# 调用a()函数
	a()
	#输出:
		#a()函数
		#b()函数

2 闭包(Closure)

  • 由内部函数改变而来
  • 外部函数的返回值是内部函数的函数名,所以外部函数的返回值类型是function类型

2.1 闭包简单实例

	# 定义闭包函数
		def A(num1):
			def B(num2):
				return num1 * num2
			return B
			
	 # 查看A()函数的返回值类型
		type(A(2))
		# 输出:<class 'function'>
		
	# otherName = A(2)把返回的function对象附给otherName 
	otherName = A(2)		#A()函数不再执行,num=2
		# 调用B()函数
		otherName(3)       
		# 输出:6
		
	# 等同于上边的意思
		A(2)(3)
		# 输出:6

2.2 内嵌函数解决局部变量不能改变全局变量的问题

# 定义闭包函数
	def A():
		num = 0
		def B():
			nonlocal num
			num = num+1
			return num
		return B
# 输出时的疑惑 
	# 输出不变:原因:A()每次都是新的B()function对象
			A()()
			1
			A()()
			1
	# 输出根据函数体发生变化:原因:a 指定了一个B()function对象
			a = A()
			a()
			1
			a()
			2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值