python函数基础3--闭包 + 递归 + 函数回调
一、闭包
1. 函数嵌套
def outer(): print("外层函数") def inner(): print("内层函数") return inner() outer()
函数嵌套流程图
2. 闭包
闭包的表现形式:函数里面嵌套函数,外层函数返回内层函数的函数名,这种情况就称之为闭包
def outer(): print("外层函数") def inner(): print("内层函数") return inner ret = outer() # 外层函数 print(ret) # <function outer.<locals>.inner at 0x0000023E73AAB8B8> ret() # 内层函数
闭包流程
二、递归
我们一般用到的循环都是while True,在函数中也有死循环,就是在函数中调用函数
1. 我们用while True打印hello world
while True: print("hello world!!!") # 无限打印hello world
2.我们用函数内调用函数打印
def hello_world(): print("hello world!!!") hello_world() hello_world() # maximum recursion depth exceeded while calling a Python object
函数内部调用函数进入死循环
这里造成一个死循环的原因是因为我们没有给定他一个条件
# 我想用递归函数来打印10"hello world!!!" def hello_world(x): if x <1: return None x -= 1 print("hello world!!!") return hello_world(x) print(hello_world(10))
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
None
def hello_world(x): if x <1: return "The End" print("hello world!!!") return hello_world(x-1) print(hello_world(10))
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
hello world!!!
The End
总结:递归函数就是函数内调用自身,并将调用的结果作为返回值返回
3.阶乘
阶乘是递归函数的一种
三、函数回调
函数回调就是定义两个函数,一个函数内将另外一个函数的函数名作为参数传入,再调用的过程。
# 函数回调 def func1(a): print("hello world") def func2(func): # func是函数名 func()
func2(func1) # func1作为func2的参数传入
def func1(*args): print("hello world") def func2(func): # func是函数名 func() func2(func1) # hello world
还可以添加多个参数用来设定条件
# 函数回调 def func1(*args): print("hello world") def func2(func, b): # func是函数名, 当参数b满足条件的时候,才能调用这个函数 if b > 3: pass else: func() func2(func1, 2) # hello world
函数的回调,当我们已经存在某个功能的函数的时候,我们不需要再写,可以直接回调利用