思考下:
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种设计模式——观察者模式
思考题:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。