zoukankan      html  css  js  c++  java
  • 函数式编程1

    Log 模块资料

    https://www.cnblogs.com/yyds/p/6901864.html

    Python 语言的高级特性:

     函数式编程(FunctionalProgramming)

     基于lambda 演算的一种编程方式

       程序中只有函数

       函数可以作为参数,同样可以作为返回值

       纯函数式编程语言:LISP ,Haskell

     Python 函数式编程只是借鉴函数式编程的一些特点,可以理解为一般函数式一半Python

        包含的内容:

                高阶函数

                返回函数

                匿名函数

                装饰器

                 偏函数

    匿名函数:Lambda 表达式

        函数 :最大程度复用代码,如果函数很小,很短,则会造成啰嗦

                      如果函数被调用的次数少,则会造成浪费

                      对于读者来说,造成阅读流程的被迫中断

          Lambda 表达式(匿名函数):

                        一个表达式,函数体相对简单

                         不是一个代码块,仅是一个表达式,可以有一个或多个参数,参数间用逗号隔开

          Lambda 表达式用法:

                           以 Lambda 开头

                           紧跟一定的参数(如果有的话)

                           参数后面用冒号将表达式和主体隔开

                            只是一个表达式,所以,没有return

    使用 Lambda 表达式计算一个数字的100倍数

    因为就是一个表达式,所以没有 return

    stm = lambda x: 100 * x

    Lambda 函数的调用与函数的调用一模一样

    stm(89)

    多个参数的 Lambda 表达式

    stm1 = lambda x,y,z: x + y * 10 + z * 10
    stm1(4,5,6)

    高阶函数

         把函数作为参数使用的函数,叫做高阶函数

          变量可以赋值

     a = 100
     b = a

          函数名就是一个变量

    def funA():
        print("In funA")
    funB = funA
    funB()

    以上代码得出的结论:

          函数名称是变量

           funA 和 funB 只是名称不一样而已

           既然函数名称是变量,则应该可以被当成参数传入到另一个函数中

    高价函数实例:

    # funA 是普通函数,返回一个数字的一百倍
    
     def funA(n):
         return n *100
    # 在写个函数,把传入的参数乘以 300 倍,利用高阶函数
     
      def funB(n):
          reutrn funA * 3
    funB(9)
    
    # 写一个高阶函数
     def funC(n,f):
         # 假定函数是把 n 扩大 100 倍
         return f(n) * 3
    print(funC(9,funA)

    比较两种函数的写法,可以看出 funC 写法要优于 funB

    例如:

    def funD(n):
        return n * 10
    # 需求变更,需要把 n 放大 30 倍,此时 funB 无法实现
    print(funC(7,funD))

    系统高阶函数  -  map

         本意就是映射,把集合或列表的元素,每一个元素都按照一定规则进行操作,生成一个新的列表或集合

           map 函数是系统提供的具有映射功能的函数,返回值是一个迭代对象

    # map 函数实例
    
    # 有一个列表,想对列表的每一个元素乘以 10 ,并的到新的列表
    
    L1 = [i for i in range(10)]
    print(l1)
    L2 = []
    for i in L1:
         L1.append(i * 10)
    print(L2)

    利用 map 实现此功能

    def mulTen(n):
          return n * 10
    L3 = map(mulTen,L1)
    for i in L3:
         print(i)

    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)
  • 相关阅读:
    (AIDE)Android Eclipse JNI 调用 .so文件加载问题
    VMware10.06精简版安装后台运行
    RAID磁盘阵列笔记
    高科固定电话机铃声
    嵌入式Linux驱动学习之路(十八)LCD驱动
    嵌入式Linux驱动学习之路(十七)驱动程序分层分离概念-平台设备驱动
    嵌入式Linux驱动学习之路(十六)输入子系统
    嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖
    嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞
    嵌入式Linux驱动学习之路(十三)按键驱动-异步通知
  • 原文地址:https://www.cnblogs.com/yuanjian6/p/10176583.html
Copyright ? 2011-2022 开发猿


http://www.vxiaotou.com