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
函数的回调,当我们已经存在某个功能的函数的时候,我们不需要再写,可以直接回调利用
posted @ 2020-01-11 10:17  zgzeng  阅读(486)  评论(0编辑  收藏  举报