美文网首页
python的匿名函数、闭包和偏函数及函数扩展

python的匿名函数、闭包和偏函数及函数扩展

作者: He | 来源:发表于2018-08-26 16:01 被阅读0次

    1.匿名函数

    匿名函数:lambda表达式:通过一个表达式实现函数功能
    基本语法:lambda 参数列表:表达式语句
    参数列表:用来给表达式传递数据
    表达式语句:计算表达式,计算结果会自动输出
    注意事项:lambda表达式,主要是用来替代功能简单的函数的!提高代码的简洁性
    不要滥用!大量使用lambda表达式会造成代码可读性的严重下降!

    fn = lambda x, y: x + y
    # 等价于
    def fn2(x, y):
        return x + y
    
    print(fn(1, 2))
    print(fn2(11, 22))
    

    2.闭包

    闭包就是函数里面嵌套一个函数
    因为函数的出现,导致变量出现了分化:全局变量、局部变量
    全局变量:当前模块中任意地方都能访问!
    局部变量:当前函数中可以操作
    ~全局变量-局部变量:变量-在函数外部调用访问:

    def outer():
        msg = "这是一个局部变量"
        print("这是一个函数", msg)
    
        def inner():
            print("可以访问外部变量msg", msg)
            return msg
    
        return inner
    

    3.偏函数

    PYTHON中的偏函数,就是一个语法糖

    def show2(name, msg):
        print(name, ": " , msg)
    
    from functools import partial
    
    s = partial(show2, msg="HI")
    
    s("tom")
    show2("jerry", "hello)
    

    4.函数的扩展了解

    1. 函数也是一个对象:函数有自己的内存地址
    '''
    # 函数的引用赋值
    def show():
        print("函数执行中....落霞与孤鹜齐飞")
    
    
    print(id(show)) # 1922539728544
    print(show) # <function show at 0x0000026F32302EA0>
    
    # 将函数的地址赋值给一个变量
    a = show
    # 通过变量也可以调用执行函数
    a()
    # import threading
    # threading.current_thread().isAlive()
    # self.isAlive = self.is_alive
    '''
    
    # 2. 函数的传值操作:设计模式:策略模式
    def show(message):
        # show函数需要一个参数message,参数需要传递一个函数
        message()
    
    def show_msg1():
        print("输出卧龙的 攻击 策略")
    
    def show_msg2():
        print("输出凤雏的 防守 策略")
    
    # 调用执行函数show,传递给函数的参数:也是一个函数
    # show(show_msg1)
    show(show_msg2)
    

    相关文章

      网友评论

          本文标题:python的匿名函数、闭包和偏函数及函数扩展

          本文链接:https://www.haomeiwen.com/subject/zvyoiftx.html