zoukankan      html  css  js  c++  java
  • 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
    函数的回调,当我们已经存在某个功能的函数的时候,我们不需要再写,可以直接回调利用
  • 相关阅读:
    Unix环境高级编程—进程关系
    如何学习CCIE
    Unix环境高级编程—进程控制(三)
    Unix环境高级编程—进程控制(二)
    _THROW 何解?
    Unix高级环境编程—进程控制(一)
    ifndef/define/endif 和 #ifdef 、#if 作用和用法
    内存MCE错误导致暴力扩充messages日志 以及chattr记录
    Intellij IDEA的安装和激活
    Xshell和Xftp间隔一段时间不操作就自动断开连接?
  • 原文地址:https://www.cnblogs.com/zgzeng/p/12153272.html
Copyright © 2011-2022 走看看