python高阶函数

python3高阶函数,学习一波;引用自:https://www.cnblogs.com/littlefivebolg/articles/9094942.html

1、map()函数
demo_list = [1, 2, 3, 4, 5]


def deal_func(x):
    return x ** 2


# map函数模拟:map_test()函数作用等同于map()
def map_test(func, iter_obj):
    num_1 = []
    for i in iter_obj:
        ret = func(i)
        num_1.append(ret)
    return num_1.__iter__()  # 用__iter__()方法,将列表转为迭代器对象


# map_test函数
print(list(map_test(deal_func, demo_list)))

# map函数
print(list(map(deal_func, demo_list)))

# map函数的参数1也可以是匿名函数、参数2也可以是字符串
print(list(map_test(lambda x: x.upper(), "stronger")))
print(list(map(lambda x: x.upper(), "stronger")))

# 输出结果:
"""
[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25]
['S', 'T', 'R', 'O', 'N', 'G', 'E', 'R']
['S', 'T', 'R', 'O', 'N', 'G', 'E', 'R']
"""
2、filter()函数

filter函数也是接收一个函数和一个序列的高阶函数,其主要功能是过滤。其返回值也是迭代器对象

names = ["Alex", "amanda", "tom", "Gina"]


# filter函数机制
def filter_test(func, iter_obj):
    names_1 = []
    for i in iter_obj:
        if func(i):  # 传入的func函数其结果必须为bool值,才有意义
            names_1.append(i)
    return names_1


# filter_test函数
print(filter_test(lambda x: x.islower(), names))
# filter函数
print(list(filter(lambda x: x.islower(), names)))

# 输出结果:输出全部为小写字母的人名
"""
['amanda', 'tom']
['amanda', 'tom']
"""
3、reduce()函数

reduce函数也是一个参数为函数,一个为可迭代对象的高阶函数,其返回值为一个值而不是迭代器对象,故其常用与叠加、叠乘等

# reduce函数不是内置函数,而是在模块functools中的函数,故需要导入
from functools import reduce

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


# reduce函数的机制
def reduce_test(func, array, ini=None):  # ini作为基数,在ini的基础上,再累加或累乘数组nums的内容
    if ini == None:
        ret = array.pop(0)
    else:
        ret = ini
    for i in array:
        ret = func(ret, i)
    return ret


# reduce_test函数,叠加
print(reduce_test(lambda x, y: x + y, nums, 100))

# reduce函数,叠乘
print(reduce(lambda x, y: x * y, nums, 100))

# 输出结果:
"""
115
12000
"""

4、sort()和sorted()函数

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

用法:

sorted(iterable, key=None, reverse=False)
iterable – 可迭代对象。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

4.1、list类型的排序操作

代码示例:

# -*- coding=utf-8 -*-


def sort_list():
    """
    关于list类型的排序操作
    """
    # 数值类型
    test_list = [1, 2, 19, 30]
    print(sorted(test_list))
    print(sorted(test_list, reverse=True))

    # 字符串类型,排序规则:ASCII顺序排序
    test_list = ["a", "boy", "named", "marvin"]
    print(sorted(test_list))  # 默认升序
    print(sorted(test_list, reverse=True))  # 降序

    # # tuple类型
    test_list = [("Up", 6), ("Down", 3), ("Left", 1), ("Right", 2)]
    # 默认使用tuple的index=0处值比较,即"Up","Down"等比较
    print(sorted(test_list))
    # 指定按元组的下下标index=1的值进行排序
    print(sorted(test_list, key=lambda item: item[1]))

    # 输出:
    """
    [('Down', 3), ('Left', 1), ('Right', 2), ('Up', 6)]
    [('Left', 1), ('Right', 2), ('Down', 3), ('Up', 6)]
    """

    # tuple的index=1处值比较,itemgetter获取元素1号位置
    from operator import itemgetter
    print(sorted(test_list, key=itemgetter(1)))
    # 输出:
    """
    [('Left', 1), ('Right', 2), ('Down', 3), ('Up', 6)]
    """


if __name__ == '__main__':
    sort_list()
4.2、dict类型的排序

def sort_map():
    """
    map类型的排序操作
    """
    # # 数值类型:返回一个列表
    test_map = {3: "a", 2: "boy", 4: "named", 1: "marvin"}
    print(sorted(test_map))  # 根据字典的key排序
    print(sorted(test_map.values()))  # 根据字典的value进行排序(依据:ASCII码表顺序)
    # # output:
    # """
    # [1, 2, 3, 4]
    # ['a', 'boy', 'marvin', 'named']
    # """

    # 根据value排序
    print(sorted(test_map.items(), key=lambda item: item[1]))
    # output:
    # [(3, 'a'), (2, 'boy'), (1, 'marvin'), (4, 'named')]

    # 根据key排序
    print(sorted(test_map.items(), key=lambda item: item[0], reverse=True))
    # output:
    # [(4, 'named'), (3, 'a'), (2, 'boy'), (1, 'marvin')]
    
    # tuple类型
    test_map = {1: ("Up", 0), 2: ("Down", 1), 3: ("Left", 2), 4: ("Right", 3)}
    print(sorted(test_map.items(), key=lambda item: item[1][0]))
    # output:
    # [(2, ('Down', 1)), (3, ('Left', 2)), (4, ('Right', 3)), (1, ('Up', 0))]
    

if __name__ == '__main__':
    sort_map()

4.3、object组成的list排序
# -*- coding=utf-8 -*-
class User(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return repr((self.name, self.age))


def sort_list_obj():
    """
    object组成的list排序
    """
    # 根据User的属性的值排序(字符串的话按ASCII排序)
    # attrgetter获取元素的属性值
    test_list = [User("James", 30), User("Marvin", 28), User("Parke", 40), User("Li", 40)]
    # print(sorted(test_list, key=lambda user: user.name))
    from operator import attrgetter
    # print(sorted(test_list, key=attrgetter("age")))

    # # 先根据age排序,如果age相等,再根据name排序
    print(sorted(test_list, key=attrgetter("age", "name")))


if __name__ == "__main__":
    sort_list_obj()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值