Python-16 函数:内嵌函数和闭包_python 内联函数和闭包

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Python的函数定义可以嵌套的,也就是允许在函数内部创建另一个函数,这样的函数叫做内嵌函数或者内部函数。

>>> def fun1():
	print('fun1正在被调用...')
	def fun2():
		print('fun2正在被调用...')
	fun2()

	
>>> fun1()
fun1正在被调用...
fun2正在被调用...
>>> 

3、闭包

闭包(closure)是函数式编程的一个重要语法结构,函数式编程是一种编程范式,著名的函数编程语言就是LISP语言(主要用于绘图,AI)

不同的编程语言实现闭包的方式不同,Python中闭包从表现上定义为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

>>> def FunX(x):
	def FunY(y):
		return x*y
	return FunY

>>> i = FunX(8)
>>> i
<function FunX.<locals>.FunY at 0x024EE390>
>>> type(i)
<class 'function'>
>>> i(5)
40
>>> FunX(8)(5)
40
>>> 

内部函数FunY()就是闭包。

在外部调用FunY()是不允许的:

>>> FunY(5)
Traceback (most recent call last):
 File "<pyshell#34>", line 1, in <module>
 FunY(5)
NameError: name 'FunY' is not defined
>>> 

闭包函数调用外部作用域但不是全部变量x,报错“局部变量x,不能在定义之前被使用”

>>> def Fun1():
	x = 5
	def Fun2():
		x*=x
		return x
	return Fun2()

>>> Fun1()
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    Fun1()
  File "<pyshell#41>", line 6, in Fun1
    return Fun2()
  File "<pyshell#41>", line 4, in Fun2
    x*=x
UnboundLocalError: local variable 'x' referenced before assignment

可以进行如下改造,x变为一个列表,因为列表不是存在栈里面

>>> def Fun1():
	x = [5]
	def Fun2():
		x[0]*=x[0]
		return x[0]
	return Fun2()

>>> Fun1()
25

(1)、关键字 nonlocal

还可以使用关键字nonlocal,把x强制声明为非局部变量。

>>> def Fun1():
	x = 5
	def Fun2():
		nonlocal x
		x*=x
		return x
	return Fun2()

>>> Fun1()
25

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

](https://bbs.csdn.net/topics/618679757)**

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值