美文网首页
Python高级-函数式编程1

Python高级-函数式编程1

作者: Yuanshuo | 来源:发表于2019-07-26 17:46 被阅读0次
    The core values of Chinese socialism

    Log模块资料

    Python语言的高级特性

    函数式编程

    • 基于lambda演算的一种编程方式
      • 程序中只有函数
      • 函数可以作为参数,同样可以作为返回值
      • 纯函数式编程语言:LISP,Haskell
    • Python函数式编程只是借鉴函数式编程的一些特点,可以理解成一半函数式编程一半Python
    • 高阶函数
    • 返回函数
    • 匿名函数
    • 装饰器
    • 偏函数

    lambda表达式

    • 函数:最大程度复用代码
      • 存在问题:如果函数很小、很短,则会造成啰嗦
    • lambd表达式(匿名函数)
      • 一个表达式,函数体相对简单
      • 不是一个代码块,仅仅是一个表达式
      • 可以有参数,有多个参数也可以,用逗号隔开
    # “小”函数举例
    def printA():
        print("AAAAAAAA")
        
    printA()
    
    
    AAAAAAAA
    
    # lambda表达式特点
    # 1.以lambda开头
    # 2.紧跟一定的参数(如果有的话)
    # 3.参数后用冒号和表达式主题隔开
    # 4.只是一个表达式,所以, 没有return
    
    #计算一个数字的100倍数
    stm = lambda x: 100*x
    stm2 = lambda a, b, c: c*100+b*10+a
    # 使用上跟函数调用一模一样
    print(stm(77))
    print(stm2(6,7,7))
    
    7700
    776
    

    高阶函数

    • 把函数作为参数使用的函数
    # 变量可以赋值
    a = 100
    b = a
    
    # 函数名称就是一个变量
    def funA():
        print("In funA")
        
    funB = funA
    funB()
    
    # 以上代码得出结论:
    # 函数名称是变量
    # funB 和 funA只是名称不一样而已
    # 既然函数名称是变量,则应该可以被当做参数传入另一个函数
    
    In funA
    
    # 高阶函数举例
    # funA是普通函数,返回一个传入数字的100倍的数字
    def funA(n):
        return n*100
    
    # 再写一个函数,把传入的参数乘以300倍,利用高阶函数
    def funB(n):
        return funA(n)*3
    
    print(funB(9))
    
    # 写一个高阶函数
    def funC(n,f):
        # 假定函数是把n扩大100倍
        return f(n)*3
    
    print(funC(9, funA))
        
    
    2700
    2700
    

    系统高阶函数-map

    • 原意就是映射,即把集合或者列表的元素,每一个元素都按照一定规则进行操作,生成一个新的列表或者集合
    • map函数是系统提供的具有映射功能的函数,返回值是一个迭代对象
    # map举例
    # 有一个列表,想对列表中的每一个元素乘以10,并得到新的列表
    l1 = [i for i in range(10)]
    print(l1)
    l2 = []
    for i in l1:
        l2.append(i*10)
    print(l2)
    
    # 利用map实现
    def mulTen(n):
        return n*10
    l3 = map(mulTen, l1)
    # map类型是一个可迭代的结构,所以可以使用for遍历
    for i in l3:
        print(i)
    
    # 以下得到的列表生成式为空,why???
    l4 = [i for i in l3]
    print(l4)
    
    
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
    0
    10
    20
    30
    40
    50
    60
    70
    80
    90
    []
    

    reduce

    • 原意是归并,缩减
    • 把一个可迭代对象最后归并成一个结果
    • 对于作为参数的函数要求:必须有两个参数,必须有返回结果
    • reduce(1, 2, 3, 4, 5) = f(f(f(f(1, 2), 3), 4), 5)
    • reduce 需要导入functools包
    from functools import reduce
    # 定义一个操作函数
    # 加入操作函数只是相加
    def myAdd(x, y):
        return x+y
    
    # 对于列表[1, 2, 3, 4, 5, 6]执行myAdd的reduce操作
    rst = reduce(myAdd, [1, 2, 3, 4, 5, 6])
    print(rst)
    
    21
    

    相关文章

      网友评论

          本文标题:Python高级-函数式编程1

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