zoukankan      html  css  js  c++  java
  • 61.基础语法-函数式编程

    匿名函数

    s = lambda x,y,z: x*100 + y*12 + z
    print(s(1, 2, 3))
    print(lambda(x,y,z: x*100 + y*12 + z)(1,2,3))
    

    高阶函数

    • 把函数作为参数使用的函数
    def A(i):
        return i*100
    
    def B(i):
        return i*2
    
    print(B(A(1)))
    
    def C(i, a):
        return a(i) * 10
    
    print(C(1,A))
    

    系统的高阶函数

    map() 映射

    • 把一个列表或集合,每一个都按照一定的规则操作后,生成一个新的列表或集合
    • 返回一个可迭代的类型,此类型就必须用迭代表示
    def M(i):
        return i *8
    
    l0 = [1,2,3,4,5]
    l1 = [11,12,13,14,15]
    l2 = {21,22,23,24,25}
    
    print(list(map(M, l0)))
    print(set(map(M, l1)))
    print(list(map(lambda i : i * 100, l0)))
    print(list(map(lambda i,n : i *100 + n, l0,l1)))
    
    for i in map(lambda i,n : i * 100 +n, l0, l1):
        print(i)
    
    print([i for i in map(lambda i: i *100, l0)])
    

    zip()

    • 把两个可迭代的内容,生成一个元组元素类型组成的可迭代的内容
    l1 = [1,2,3,4]
    l2 = [11,22,33,44]
    print(list(zip(l1, l2)))
    

    enumerate()

    • 给可迭代的内容,自动添加一个索引,形成一个元组元素类型组成的可迭代的内容
    • 参数start:从多少开始
    l0 = ["er", "to", "d"]
    print(list(enumerate(l0, start=100)))
    

    reduce() 归并,缩减

    • 把一个可迭代对象,按照一定的规则,合并成一个结果
    from functools import reduce
    
    def R(x,y):
        return x+y
    
    print(reduce(R, [i for i in range(10)]))
    print(reduce(R, range(10)))
    

    filter()

    • 对一组数据进行过滤,返回符合条件数据组成的列表
    def Fi(a):
        return a % 2 == 0
    
    print(list(filter(Fi, [2,6,8,3,9,10,3])))
    

    sorted()

    • 把一个序列按照给定的规则进行排序,生成新序列
    l = [23,546,767,878,6556,7688,1,34,5]
    print(l)
    print(sorted(l))
    print(sorted(l, reverse=True)) #reverse控制正序和倒叙,默认为由低到高正序
    print(sorted(l, key=abs)) #key是规则
    

    返回函数

    • 返回值为函数的函数
    def Fan0():
         
        def Fan1():
            print("函数1")
        
        return Fan1
    
    f2 = Fan0()
    print(type(f2))
    print(f2)
    

    闭包

    • 一个函数在内部定义函数,内部函数应用外部函数的参数或局部变量,当内部函数被当作返回值时相关参数和变量保存在返回的函数中,这种结果叫做 闭包。

    • 大坑::::返回闭包时,返回函数不能引用任何循环变量

    • 解决方式:::用函数替代循环变量

    #此代码为正常代码
    #解决问题后的代码
    def Bi0(*args):
    
        def Bi1():
            n = 0
            for i in args:
                n += i
            return n
        
        return Bi1
    
    b = Bi0(0,1,2,3,4,5,6,7,8,9)
    print(b())
    

    装饰器(魔法糖)

    • 不改变函数代码的基础上,无限制的扩展功能的一种机制
    • 本质:是一个返回函数
    #def 函数名(arg, *args, **kwargs)
    #args单个参数
    #*args参数打包成元组给函数调用
    #**kwargs参数打包成字典给参数调用
    #def 函数名(1,2,3,4,a=5,b=6)相当于
    #args接了一个1
    #*args接了一个元组(2,3,4)
    #**kwargs接了一个字典{"a":5, "b":6}
    
    def ZS0(Func):
        
        def ZS1(*args, **kwargs):
            
            print("前装饰")
            Func(*args, **kwargs)
            print("后装饰")
            
            return Func
        
        return ZS1
    
    @ZS0 #魔法糖:相当于把下面的函数,以参数的形式,传入相应的闭包,进行修饰
    def H():
        print("-------")
    
    H()
    

    偏函数

    • 改变函数的一些默认参数,并固定,以方便使用,这样的参数就叫做偏函数
    import functools
    
    #形成一个新函数int0,把int函数赋值给他,并把默认参数base的值从原来的10改为16后固定
    int0 = functools.partial(int, base=16)
    
    print(int0("10"))
    
  • 相关阅读:
    locust与jmeter在压测时的比较
    通过python异步通讯方式构建高并发压力测试工具
    开博寄语
    【linux】【root权限的掌控】
    【linux】【qt5界面】【系统托盘图标的实现】
    【win】【qt5】【本地网络相关信息,诸如ip,mac等】
    【win】【qt5】【qt汉化:输入框之右键英文变中文】
    【linux】【qt5】【qt程序防多开设置,通过设置共享内存实现,超短代码,超级有效】
    【qt】【QString的诸多操作】
    【linux】【qt5】【将linux下的qt程序打包发布(完全适用于中标麒麟)】
  • 原文地址:https://www.cnblogs.com/TK-tank/p/12346543.html
Copyright © 2011-2022 走看看