Python基础——第九章 第三部分 闭包、递归、回调
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python基础——第九章 第三部分 闭包、递归、回调,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2206字,纯文字阅读大概需要4分钟。
内容图文
![Python基础——第九章 第三部分 闭包、递归、回调](/upload/InfoBanner/zyjiaocheng/597/182917bff639428094f6eafb73548c12.jpg)
思考下:
1、函数里面可以再定义函数,那函数里面定义的函数可以在外面调用吗?
2、函数里面可以自身调用自身吗?
1、闭包
1.1、闭包定义
闭包是函数里面嵌套函数,外层函数返回内层函数,这种情况称之为闭包
1.2、闭包与嵌套函数的区别
1.2.1、嵌套函数
def func():
def func1():
return "hello"
return func1() #返回值是func1函数值
print(func())
'''执行结果:hello'''
1.2.2、闭包
def func():
def func1():
return "hello"
return func1 #返回值是func1函数
a = func(' world')
print(a)
print(a()) #相当于函数再次调用
'''执行结果:<function func.<locals>.func1 at 0x0000000001E57DC0>'''
'''执行结果:hello'''
def func(x):
def func1():
return "hello" + x
return func1 #返回值是func1函数
a = func(' world')
print(a)
print(a()) #相当于函数再次调用
'''执行结果:<function func.<locals>.func1 at 0x0000000001E57DC0>'''
'''执行结果:hello world'''
闭包必须是嵌套函数,外层函数返回内层函数的引用(函数名),内层函数调用外部函数的变量
闭包是概念,不是某种函数类型,和递归的概念类似,就是种特殊的函数调用
闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁
2、递归
递归中可以函数自身调用自身,但是使用时类似于条件循环一样,要有递归的终止条件
def func():
print("我要疯了")
func()
func()
'''会一直打印“我要疯了”
直至内存溢出,然后报错'''
以阶乘为例:
#阶乘
def factorial(n): #提示:n<=998
if n > 1:
return n * factorial(n-1)
else:
return 1
print(factorial(-10)) '''执行结果:1'''
print(factorial(1)) '''执行结果:1'''
print(factorial(5)) '''执行结果:120'''
同理,计算斐波拉切数列之和
#斐波拉切数列之和
def fn(n):
if n==0 or n==1:
return n
else:
return fn(n-1)+fn(n-2)
print(fn(10))
'''执行结果:55'''
使用递归时,常常可以让代码更加简洁
递归会占用比较多的内存,当递归次数比较多时,性能就会降低, 因此不建议多使用递归
3、回调
回调函数: 自身是一个函数,只是被传入到另一个函数当中,供其调用
def choice(play, ch):
if ch:
play()
else:
print('OK')
def play():
print('hahahaha')
choice(play,'') #这里仅0、()、[]、{}、''、""、False、None才会执行else
'''执行结果:hahahaha'''
#回调函数主要用于事件驱动模型、23种设计模式——观察者模式
回调函数不一定会被调用,是否调用由被传入函数的内部逻辑决定
思考题:
定义一个函数,传入一个字典和一个元组,
在字典key值不变的情况下,将字典的value值和元组的值交换,返回交换后的字典和与元组
内容总结
以上是互联网集市为您收集整理的Python基础——第九章 第三部分 闭包、递归、回调全部内容,希望文章能够帮你解决Python基础——第九章 第三部分 闭包、递归、回调所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。