[ python ] 匿名函数和高阶函数

匿名函数

描述:
    关键字 lambda 定义的函数
    
语法:

    函数名 = lambda 参数:返回值



返回值:
    函数返回结果值

实例:

一个参数的匿名函数:

func = lambda x: x*x

f = func(2)
print(f)

# 执行结果:
# 4

 多个参数的匿名函数:

func = lambda x, y: x+y

f = func(1, 2)
print(f)

# 执行结果:
# 3

高阶函数

(1)map

描述:
    map()会根据提供的函数对指定序列做映射。
    
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数的返回值的新列表
    
语法:

map(function, iterable, ...)



参数:
    function -- 函数
    iterable -- 一个或多个序列
    
返回值:
    python 2.X 返回列表
    python 3.X 返回迭代器

实例:

 提供两个列表,对相同位置的列表数据进行相加

 (2)reduce

描述:
    对参数序列中的元素进行累积,效果如下:
    
    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    
语法:

reduce(function, iterable[, initializer])



参数:
    function -- 函数,有两个参数
    iterable -- 可迭代对象
    initializer -- 可选,初始参数
    
返回值:
    返回函数计算结果

实例:

 结合匿名函数+高阶函数的使用:

from functools import reduce

r = reduce(lambda x, y: x + y, [1,2,3,4,5])
print(r)

# 执行结果:
# 15

(3)filter

描述:
    python内建的 filter() 函数用于过滤序列
    
语法:
    filter()接收一个函数和一个序列,filter()把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素

实例:

去掉list中的偶数,只保留奇数

l = [1,2,3,4,5,6,7, 8, 9]
def is_odd(n):
    return n % 2 == 1


f = filter(is_odd, l)
print(list(f))

# 执行结果:
# [1, 3, 5, 7, 9]

练习:

回数是指从左到右读和从右到左读都是一样的数,例如:12321,909  请利用 filter() 筛选出回数

def is_palindrome(n):
    hx = str(n) 	# 首先将参数转换为str类型
    if hx == hx[::-1]:	# 如果从左到右,从右到左都相等,则返回回数
        return hx

(4)sorted

描述:
    sorted() 函数对所有可迭代的对象进行排序操作。
    
sort 和 sorted 区别:
    sort 是应用在 list 上的方法,sorted可以对所有可迭代的对象进行排序操作。
    list 的 sort 方法返回是对已经存在的列表进行操作,无返回值,而内建函数sorted 方法返回的是一个新的list,而不是在原来的基础上进行的操作
    
语法:

sorted(iterable[, cmp[, key[, reverse]]])


    
    key: 主要用来进行比较的元素,只有一个参数,具体的函数的参数就是取自与可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse:默认排序规则是升序排序, reverse=True 则降序排序
    
返回值:
    返回重新排序的列表

实例:

比较数字

In [1]: sorted([36, 5, -12, 9, -21])
Out[1]: [-21, -12, 5, 9, 36]

定义key函数,使用绝对值进行排序

In [2]: sorted([36, 5, -12, 9, -21], key=abs)
Out[2]: [5, 9, -12, -21, 36]

定义key函数,使用绝对值进行降序排序

In [3]: sorted([36, 5, -12, 9, -21], key=abs, reverse=True)
Out[3]: [36, -21, -12, 9, 5]

(5)zip

描述:
    zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

语法:

zip([iterable, ...])


    
    iterable: 一个或多个迭代器
    
返回值:
    返回元组列表
    
实例:

In [10]: a = [1,2,3]

In [11]:  b = [4,5,6]

In [12]: list(zip(a, b ))
Out[12]: [(1, 4), (2, 5), (3, 6)]


#以最短的列表作为组合的结尾

In [13]: a = [1,2,3,4,5]

In [14]: b = [1,2]

In [15]: list(zip(a, b ))
Out[15]: [(1, 1), (2, 2)]
原文地址:https://www.cnblogs.com/hukey/p/9754016.html