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)
  • 相关阅读:
    EXTJS 4.2 资料 控件之checkboxgroup的用法(静态数据)
    EXTJS 4.2 资料 控件之Window窗体相关属性的用法
    EXTJS 4.2 资料 控件之textfield文本框加事件的用法
    Entity Framework 学习笔记(一)之数据模型 数据库
    EXTJS 4.2 资料 控件之checkboxgroup的用法(动态数据)
    EXTJS 4.2 资料 控件之Grid 列鼠标悬停提示
    Entity Framework 学习笔记(二)之数据模型 Model 使用过程
    EXTJS 4.2 资料 控件之radiogroup 的用法
    EXTJS API
    vue移动端弹框组件,vue-layer-mobile
  • 原文地址:https://www.cnblogs.com/yuanjian6/p/10176583.html
Copyright © 2011-2022 走看看