zoukankan      html  css  js  c++  java
  • python3笔记十六:python匿名函数和高阶函数

    一:学习内容

    • lambda函数
    • map函数与reduce函数
    • filter函数
    • sorted函数

    二:匿名函数-lambda

    1.概念:不使用def这样的语句去定义函数,使用lambda来创建匿名函数

    2.特点:

    • lambda只是一个表达式,函数体比def简单
    • 实现的逻辑比较简单,主体是一个表达式,而不是代码块,lambda表达式中封装简单的逻辑
    • lambda函数有自己的命名空间,且不能访问自由参数列表之外的或者全局命名空间的参数

    3.格式:

    lambda 参数1,参数2,......,参数n:expression

    4.lambda函数练习一

    a=lambda x:x+1

    a(1)

    a(2)

    lambda作为一个表达式,定义了一个匿名函数,上面的代码x为入口参数,x+1为函数体,用函数来表示为:

    def g(x):

        return x+1

    5.lambda函数练习二

    a=lambda x,y,z:(x+y)**z

    print(a(1,2,3))

    6.lambda函数练习三

    def make_repeater(n):

        return lambda s:s*n

    twice=make_repeater(2)

    twice('word')

    twice(5)

    上面的函数可以转换为:

    twice=lambda s,n:s*n

    twice('word',2)

    twice(5,2)

    7.lambda函数练习四

    lambda表达式会返回一个函数对象,如果没有变量接受这个返回值,它很快就会被丢弃,也正是由于lambda只是一个表达式,所以它可以直接作为list、dict等成员

    lists=[lambda s:s**3,lambda a:a**3]

    data=lists[0]

    data(2)

    三:高阶函数-map和reduce

    python内置了map()和reduce函数()

    1.map()函数

    格式:map(fn,lsd)

    参数1是一个函数,fn只有一个参数
    参数2是一个序列

    功能:将传入的函数依次作用在序列中的每一个元素,并把结果作为新的Iterator返回

    举例1:

    #将单个字符转成对应字面量整数
    def chr2int(chr):
        return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]

    list1 = ["2","1","6","5"]
    #惰性列表,需要用list显示转换才会显示
    res = map(chr2int,list1)
    print(res)
    print(list(res))

    举例2:

    #将整数元素的序列转为字符型的
    #[1,2,3,4]   ["1","2","3","4"]
    a = [1,2,3,4]
    print(list(map(str,a)))

    2.reduce()函数

    格式:reduce(fn,lsd)

    参数1为函数,fn有两个参数
    参数2位列表

    功能:一个函数作用在序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素累计运算

    举例1:

    from functools import reduce
    #求一个序列的和
    def mySum(x,y):
        return x+y

    list2 = [1,2,3,4,5]
    r = reduce(mySum,list2)
    print(r)

    3.map()函数和reduce()函数结合使用

    举例1:

    #将字符串转成对应字面量数字

    def str2int(str):
        def fc(x,y):
            return x*10 + y
        def fs(chr):
            return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]
        return reduce(fc,map(fs,list(str)))

    a = str2int("13579")
    print(a)
    print(type(a))

    四:高阶函数-filter()

    1.filter()函数

    格式:filter(fn,lsd)
    参数1为函数
    参数2位序列

    功能:用于过滤序列,即把传入的参数依次作用于序列的每个元素,根据返回的是True还是False决定是否保留该元素

    举例1:

    list1 = [1,2,3,4,5]

    #筛选条件,偶数保留
    def func(num):
        if num % 2 ==0:
            return True
        return False
    #惰性序列,需要显示转换为列表才能展示数据
    res = filter(func,list1)
    print(list(res))
    print(list1)

    举例2:

    data = [["姓名","年龄","爱好"],["tom",25,"无"],["hdd",26,"游泳"]]
    def fun2(v):
        v = str(v)
        if v == "无":
            return False
        return True

    for line in data:
        s = filter(fun2,line)
        print(list(s))

    四:高阶函数-sorted()

    用于排序

    1.sorted()函数--普通排序

    list1 = [4,7,2,6,3]
    list2 = sorted(list1)  #默认升序排序
    print(list1)
    print(list2)

    2.sorted()函数--降序排序

    list5 = [4,7,2,6,3]
    #reverse 按升序排完以后反转
    list6 = sorted(list5,reverse=True)
    print(list5)
    print(list6)

    3.sorted()函数--字符串排序按ASCII码值排序

    #字符串排序,比较ASCII码值
    list7 = ["b","d","a","e"]
    list8 = sorted(list7)
    print(list7)
    print(list8)

    4.sorted()函数-自定义排序规则

    #按绝对值大小排序
    list3 = [4,-7,2,6,-3]
    #key接受函数来实现自定义排序规则
    list4 = sorted(list3,key=abs)
    print(list3)
    print(list4)

    5.sorted()函数-自定义排序规则2

    #按字符串长短排序,函数可以自己写
    def myLen(str):
        return len(str)

    list9 = ["b333","d11111111","a22","e4322"]
    list10 = sorted(list9,key=myLen)
    print(list9)
    print(list10)

  • 相关阅读:
    centos7配置vsftpd
    vsftpd上传文件出现553 Could not create file错误解决方法
    mysql表引擎myisam改为innodb
    python字符串
    linux虚拟机设置本地yum源
    python3读取excel数据
    expect远程登录服务器并执行命令
    sed中支持变量的处理方法
    test
    test
  • 原文地址:https://www.cnblogs.com/miaomiaokaixin/p/11498572.html
Copyright © 2011-2022 走看看