zoukankan      html  css  js  c++  java
  • 偏函数 匿名函数 高阶函数 map filter reduce

    
    
    # 偏函数 创建一个新的函数,指定我们要使用的函数的某个参数为固定的值,这个新函数就是偏函数
    def test(a, b, c, d=1):
        print(a + b + c + d)
    
    
    from functools import partial  # 使用偏函数必须导入此模块
    
    newFunc = partial(test, c=5)  # newFunc为偏函数,它设定了test函数中c的值固定为5
    
    newFunc(1, 2)  # 9  相当于 test(1,2,5,1)
    
    newFunc2 = partial(test, 5, 6)  # newFunc2为偏函数,它设定了test函数中第一个参数的值固定为5
    
    newFunc2(10, 2)  # 23 相当于 test(5,6,10,2)
    
    
    # 匿名函数 使用lambda关键字,通常与其它函数配合使用
    # 返回单个值
    print((lambda x, y, z: x + y + z)(1, 2, 3))
    # 返回多个值
    print((lambda x, y, z: (x + y + z, x + 1, y + 1, z + 1))(1, 2, 3))
    
    
    # 高阶函数(以下两个特性满足一个即为高阶函数)
    # 1函数的传入参数是一个函数名
    # 2函数的返回值是一个函数名
    
    # 例对列表进行加一或减一或平方,并返回结果
    def add_one(x):
        return x + 1
    # 相当于 lambda x:x+1
    
    def reduce_one(x):
        return x - 1
    # 相当于 lambda x:x+1
    
    
    def square(x):
        return x ** 2
    # 相当于 lambda x:x**2
    
    
    list1 = [1, 2, 3, 4, 5]
    list2 = [11, 21, 32, 43, 54]
    
    
    def calc(func, list):
        res = []
        for i in list:
            r = func(i)  # 这里调用了传入的函数
            res.append(r)
        return res
    
    
    print(calc(reduce_one, list1))
    print(calc(lambda x: x - 1, list2))
    
    
    # map函数:对可迭代对象的每个元素依次处理,返回依次处理后的结果
    # 以上的calc函数的功能就是python中内置map函数的功能
    # map函数的第一个参数可以是匿名函数,也可是自定义函数
    # map函数的第二个参数是一个可迭代对象
    result = list(map(lambda x: x - 1, list2))  # 将map执行返回的结果转为列表
    print(result)
    
    # 例 取出电影院里名字结尾有sb的观众
    movie_people = ['alex_sb', 'wu_sb', 'zhang_sb', '张三']
    
    
    def filter_test(func, array):
        ret = []
        for p in array:
            if func(p):
                ret.append(p)
        return ret
    
    
    print(filter_test(lambda n: n.endswith('sb'), movie_people))
    
    # filter函数:对可迭代对象的每个元素筛选处理,返回筛选后的结果
    # 以上的filter_test函数就是python中内置filter函数的功能
    # filter函数的第一个参数可以是匿名函数,也可是自定义函数
    # filter函数的第二个参数是一个可迭代对象
    result = list(filter(lambda n: n.endswith('sb'), movie_people))  # 将map执行返回的结果转为列表
    print(result)
    
    # 通过以上两个例子,在python中还有类似的一个函数reduce
    # reduce函数:对可迭代对象的每个元素合并处理,返回一个值
    # 使用reduce,必须from functools import reduce
    # reduce函数的第一个参数可以是匿名函数,也可是自定义函数
    # reduce函数的第二个参数是一个可迭代对象
    # reduce函数的第三个参数是初始值,也可以不写
    # 例 将列表中的所有数字相乘得到结果
    from functools import reduce
    num_list = [1, 2, 4, 11]
    print(reduce(lambda x, y: x * y, num_list, 1))
    
    # 例 计算1-100的和
    print(reduce(lambda x, y: x + y, range(1,101)))
  • 相关阅读:
    爬虫时http错误提示
    json.dumps()和json.loads()
    scrapy框架原理学习
    利用tushare进行对兴业银行股价的爬取,并使用numpy进行分析
    随机生成60位同学成绩,并求他们的平均数,中位数,众数等
    numpy中random的使用
    matplotlib中subplot的使用
    使用matplotlib画饼图
    乔坟,乔坟!
    c#控件的动画显示效果
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9416630.html
Copyright © 2011-2022 走看看