• python函数式编程


    匿名函数

    lambda arg1,arg2,arg3...: expression
    
    • 1

    匿名函数只能有一个表达式,不用写return,返回值就是该表达式的结果。

    匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量,再利用变量来调用该匿名函数。

    高阶函数

    概念

    函数名的本质就是指向函数的变量,所以一个变量可以指向函数。

    函数的参数能够接收变量,那么一个函数就可以接收另外一个函数作为参数,这种函数就称为高阶函数。

    def add(x, y, f):
        return f(x) + f(y)
    
    print(add(-1, 5, abs))
    # 6
    
    • 1
    • 2
    • 3
    • 4
    • 5

    常见高阶函数

    1. map:会根据提供的函数对指定序列做映射

    map(function, iterable, ...)
    
    • 1
    print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])))
    # [1, 4, 9, 16, 25]
    
    • 1
    • 2

    2022.9.10更新
    突然好奇for循环、列表推导式和map函数的性能差异,所以写了个测试代码:

    from time import time
    
    if __name__ == '__main__':
        epoch=int(1e+7)
        start = time()
        arr = []
        for i in range(epoch):
            arr.append(i ** 2)
        print(time() - start)	# 2.8252151012420654
        start = time()
        arr = [x ** 2 for x in range(epoch)]
        print(time() - start)	# 2.192713975906372
        start = time()
        arr = map(lambda x: x ** 2, range(epoch))
        print(time() - start)	# 0.08975982666015625
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    我只能说map简直是神一般的存在。


    2. reduce:会对参数序列中元素进行累积

    from functools import reduce
    reduce(function, iterable[, initializer])
    
    • 1
    • 2
    from functools import reduce
    print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))
    # 15
    
    • 1
    • 2
    • 3

    3. filter:用于过滤序列,返回由符合条件元素组成的新列表

    print(list(filter(lambda x: x % 2 == 1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))
    # [1, 3, 5, 7, 9]
    
    • 1
    • 2

    4. sorted:对所有可迭代的对象进行排序操作

    sorted(iterable, cmp=None, key=None, reverse=False)
    # key:排序的规则
    
    • 1
    • 2

    闭包

    什么是闭包?

    闭包其实就是一个函数。

    如何创建闭包?

    1. 要有函数的嵌套,即有外部函数和内部函数;
    2. 内部函数中要使用外部函数的变量;
    3. 外部函数必须有返回值,返回内部函数名。

    如何使用闭包?

    # 以求两个数的和为例
    def funcOut(num1):
        def funcIn(num2):
            return num1 + num2
        return funcIn
    
    f=funcOut(100)
    print(f(200))
    # 300
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    装饰器

    在Python中使用装饰器,需要使用一个特殊的符号@来实现。

    在定义装饰器函数或类时,使用“@装饰器名称”的形式将符号“@”放在函数或类的定义行之前。

    偏函数

    from functools import partial
    xxx=partial(func,args=...)
    
    • 1
    • 2
  • 相关阅读:
    零拷贝技术:减少数据复制和上下文切换,提高网络传输效率(下)
    TMC2660步进电机驱动
    Java连接redis报错timed out问题解决
    mysql 主从复制 mysql版本5.7.35
    如何检验下载的大模型checkpoint文件是否正确的解决方案
    Kubeadm搭建k8s
    二十三、设计模式之组合模式![
    在oracle数据库中如何插入CLOB值
    [附源码]Python计算机毕业设计Django的剧本杀管理系统
    你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!
  • 原文地址:https://blog.csdn.net/im34v/article/details/126756025