python函数式编程基础(三)

python内建的高阶函数(hign oreder function)

python函数式编程基础(一):https://blog.csdn.net/Geroge_lmx/article/details/80740484

python函数式编程基础(二):https://blog.csdn.net/Geroge_lmx/article/details/80791803

一.什么是高阶函数:
    满足下列条件中“一个”的函数即为高阶函数:
        1.接收一个或多个函数作为参数传入
        2.返回一个函数
二.map  函数:
    格式:
        map(func, *iterable):
    作用:
        用函数和可迭代对象中的每一个元素作为参数返回新的可迭代对象
    备注:

        1.func函数的形参个数必须和提供的可迭代对象的个数相同
        2.当最短的一个可迭代对象不再提供数据时迭代结束
        3.*ietrable获取任意多个可迭代对象,封装在一个元组中
        4.map函数的第一个参数func,必须有返回值

实例1:
>>>list(map(lambda x, y : x ** y, range(1,4),range(1,4)))
>>>[1, 4, 27]
#备注:map函数返回的是一个可迭代对象,为了验证结果,故使用list函数将其转换为列表
实例2:
def mydict(key, value):
    dict_created = {} #创建dict_created字典
    dict_created[key] = value #将传入的参数分别作为字典的键和值
    return dict_created #返回一个字典

for dict_item in map(mydict, range(5), "abcde"):
    print(dict_item)

运行结果:
    {0: 'a'}
    {1: 'b'}
    {2: 'c'}
    {3: 'd'}
    {4: 'e'}
三.filter 函数:
    格式:
        filter(function, ietrable)
        ---->参数function必须是一个可以返回bool值的函数或lambda表达式,这样才能对数据起到过滤作用
    作用:
        筛选可迭代对象中的数据,返回一个可迭代对象,此可迭代对象对iterable提供的数据进行筛选
    备注:
        函数function将对iterable中的每个元素进行求bool值,返回True则保留,返回False则丢弃

实例1:输出1-10之间可以被3整除的整数:
#lambda x : x % 3 == 0表达式可以返回True/False
>>> list(filter(lambda x : x % 3 == 0, range(1,10)))
>>> [3, 6, 9]
实例2:输出0-100之间的素数:
def is_prime(n):
    """判断n是否为素数"""
    if n < 2:
        return False
    else:
        for number in range(2,n):
            if n % number == 0:
                return False
    return True

L = list(filter(is_prime, range(100)))
print(L)

运行结果:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ... 79, 83, 89, 97]
四.sorted 函数:
    格式:
        sorted(iterable, key=None, reverse=False)------->返回值为列表
    作用:
        将原可迭代对象提供的数据进行排序,生成排序后的 “列表”
    备注:
        1.iterable是可迭代对象
        2.key函数是用来提供一个排序参考值的函数,这个函数的返回值将作为排序的"依据"
        3.reversed标志用来设置是否降序排序

实例1:
#在交互模式下创建列表L
>>> L = ['Alex', 'Bob', 'Thomas', 'Mathieu', 'Alihanda']
>>> L
['Alex', 'Bob', 'Thomas', 'Mathieu', 'Alihanda']
#按照字符串的长度降序排列
>>> sorted(L, key=len, reverse=True)
['Alihanda', 'Mathieu', 'Thomas', 'Alex', 'Bob']
实例2:
L = [{'name':'Alex', 'score':90, 'age':23}, {'name':'Thomas', 'score':80, 'age':27}]
#按成绩高低排序
update_L = sorted(L, key=lambda x : x['score'], reverse=True)
print(update_L)
#按年龄从大到小排序
update_L = sorted(L, key=lambda x : x['age'], reverse=True)
print(update_L)

#运行结果:
[{'age': 23, 'score': 90, 'name': 'Alex'}, {'age': 27, 'score': 80, 'name': 'Thomas'}]
[{'age': 27, 'score': 80, 'name': 'Thomas'}, {'age': 23, 'score': 90, 'name': 'Alex'}]
小结:
     1.map函数和filter函数返回的都是可迭代对象;sorted函数返回的是列表;
    2.传入map函数的可迭代对象可以是任意多个,而传入filter函数的可迭代对象只能是一个;
    3.map函数,filter函数中function形参为位置形参,sorted函数中function的传入使用关键字传参,key=function.





猜你喜欢

转载自blog.csdn.net/geroge_lmx/article/details/80727515
今日推荐