• Python语言的高级特性


    函数式编程

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

    • 函数中只有函数
    • 函数可以作为参数,同样可以作为返回值
    • 纯函数式编程语言:LISP , Haskell

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

    需要讲述:

    • 高阶函数
    • 返回函数
    • 匿名函数
    • 装饰器
    • 偏函数

    lambda表达式

    函数:最大程度复用代码

    存在问题:

    • 如果函数很小,很短,则会造成啰嗦  
    • 如果函数被调用次数少,则会造成浪费
    • 对于阅读者来说,造成阅读流程的被迫中断

    lambda表达式(匿名函数):

    • 一个表达式,函数体相对简单
    • 不是一个代码块,仅仅是一个表达式
    • 可以有参数,有多个参数也可以,用逗号隔开

    用法:

    • 以lambda开头
    • 紧跟一定的参数(如果有的话)
    • 参数后用冒号和表达式主题隔开
    • 只是一个表达式,所以没有return

    计算一个数字的100倍数

    stm = lambda x: 100 * x
    print(stm(89))
    结果:
    8900

    多个参数

    stm2 = lambda x,y,z,:x + y * 10 + z * 100
    print(stm2(4,5,6))
    结果:
    654

    高阶函数

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

    变量可以赋值

    a = 100
    b = a 

    函数名称就是一个变量

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

    以上代码得出结论:

    • 函数名称是变量
    • funB和funA只是名称不一样
    • 既然函数名称是变量,则应该可以被当做参数传入另一个函数
    #高阶函数举例
    #funA是普通函数,返回一个传入数字的100倍数字
    def funA(n):
        return  n * 100
    # 再写一个函数,把传入参数乘以300倍
    def funB(n):
        #最终返回300n
        return funA(n) *3
    print(funB(9))
    
    
    #写一个高阶函数
    def funC(n,f):
        #假定函数是把n扩大100倍
        return f(n) * 3
    print(funC(9,funA))

    系统高阶函数-map

    • 映射,把集合或列表的元素,每个元素都按照一定规则进行操作,生成一个新的列表或者集合
    • map函数是系统提供的具有映射功能的函数,返回值是一个迭代对象
    #map 举例
    #有一个列表,想对列表里的每个元素乘以10
    
    L1 = [ i for i in range(10)]
    l2 = []
    for i in L1:
         l2.append(i * 10)
    print(l2)
    
    或高阶函数
    def mulTen(n):
        return n*10
    l3 = map(mulTen,L1)
    for i in l3:
        print(i,end=" ")

    reduce

      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
    rst = reduce(myAdd,[1,2,3,4,5,])
    print(rst)
    结果:
    15

    filter函数

    • 对一组数据进行过滤,符合条件的数据会生成一个新的列表并返回
    • 调用函数:filter(f,data),f是过滤函数,data是数据
    def isRven(a):
        return a % 2 == 0
    l = [1,2,3,4,5,6,7,8,9,10]
    rst = filter(isRven,l)
    print(rst)
    print([i for i in rst])

    高阶函数-排序

    • 把一个序列安照给定算法进行排序
    • key:在排序前对每个元素进行key函数运算,可以理解成按照key函数定义的逻辑进行排序
  • 相关阅读:
    canvas-0translate.html
    Canvas-line.html
    canvas-tangram.html
    canvas-arc.html
    js-MediumGrade-base.js
    js-Higher-base.js
    js-QuickStart-base.js
    ajax.js
    fullScreen.html
    setInterval.js
  • 原文地址:https://www.cnblogs.com/wanglan/p/9284217.html
Copyright © 2020-2023  润新知