高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
abs # Python内置的绝对值函数 a = abs(-10) # 直接调用abs()函数 f = abs # 函数本身赋值给变量,即变量指向函数 b = f(-10) print(a) print(b) # 结果 ''' 10 10 ''' mapmap()函数会根据的函数对指定的序列做映射。 map()函数语法:map(function, iterable, ...),其中第一个参数function表示对序列每个元素进行同样的处理的表达式;iterable表示一个或者多个序列。
特别注意,py2返回的是列表,py3返回是一个迭代器。
# 计算平方 def square(x): return x ** 2 data_list = [1, 2, 3, 4, 5] res = map(square, data_list) # 使用匿名函数 ans = map(lambda x: x ** 2, data_list) print(res) print(list(res)) print(ans) print(list(ans)) # 结果 ''' <map object at 0x0000014F2F0F2A58> [1, 4, 9, 16, 25] <map object at 0x0000014F2F32B860> [1, 4, 9, 16, 25] ''' reducereduce()函数会对参数序列中元素进行积累。函数将一个数据集合(链表、元组等)中的所有数据进行下列操作:用穿个reduce中的函数function(有两个参数)相对集合中的第1、2个元素进行操作,得到的结果在于第三个数据继续用function函数进行运算,如此循环迭代,最后得到结果。
reduce()函数语法:reduce(function, iterable[, initializer]),其中第一个参数是function函数,里面有两个参数;第二个参数iterable是可迭代对象;第三个是可选参数,初始参数。
from functools import reduce # 两数相加 def add(x, y): return x + y data_list = [1, 2, 3, 4, 5] res = reduce(add, data_list) # 1+2+3+4+5 # 使用匿名函数 ans = reduce(lambda x, y: x + y, data_list) # 1+2+3+4+5 print(res) print(ans) # 结果 ''' 15 15 ''' filterfilter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成的新列表。
filter()函数语法:filter(function, iterable),reduce()接收连个参数,第一个参数function是判断函数,第二个参数iterable是可迭代对象,序列的每个元素作为参数传递给函数进行判断,然后返回True/False,最后将返回True的元素放到新列表中。
# 过滤出列表中所有奇数 def is_odd(n): return n % 2 == 1 data_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] res = filter(is_odd, data_list) # 使用匿名函数 ans = filter(lambda x: x % 2 == 1, range(1, 11)) print(res) print(list(res)) print(ans) print(list(ans)) # 结果 ''' <filter object at 0x000001F3A98EB198> [1, 3, 5, 7, 9] <filter object at 0x000001F3A990EB38> [1, 3, 5, 7, 9] ''' sortedsort与sorted的区别:
sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作。list的sort方法返回的是对已经存在的列表进行操作,而内建函数sorted方法返回的是一个新的list,而不是在原来的list上进行的操作。sorted()函数语法:sorted(iterable, key=None, reverse=False),其中iterable是可迭代对象;key主要是用来进行比较元素,只有一个参数,具体的函数的参数是取自于可迭代对象中,指定可迭代对象中的一个元素来排序;reverse是排序规则,默认的是False升序,True为降序。
a = [2, 3, 1, 4, 2, 0, -1] b = a c = ['a', 'C', 'A', 'b', 'c', 'B'] d = {1: 'D', 3: 'B', 5: 'A', 4: 'E', 2: 'C'} e = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] a.sort() print(a) print(sorted(b)) print(sorted(b, key=lambda x: x*-1)) # 利用key进行倒序排序 print(sorted(b, reverse=True)) # 利用reverse=True进行倒序排序 print(sorted(b, key=abs)) # 按绝对值大小升序排序 print(sorted(c)) # 字符串排序,按照ASCII大小比较 print(sorted(c, key=str.lower)) # 忽略字符串大小写排序 print(sorted(d)) # 对字典排序默认是对键keys进行排序 print(sorted(d.keys())) # 对字典按keys值排序 print(sorted(d.items(), key=lambda x: x[0])) # 还是对字典按keys值排序 print(sorted(d.items(), key=lambda x: x[1])) # 对字典按键值value排序升序 print(sorted(e,key=lambda x: x[0])) # 根据姓名升序排序 print(sorted(e,key=lambda x: x[1], reverse=True)) # 根据得分降序 # 结果 ''' [-1, 0, 1, 2, 2, 3, 4] [-1, 0, 1, 2, 2, 3, 4] [4, 3, 2, 2, 1, 0, -1] [4, 3, 2, 2, 1, 0, -1] [0, -1, 1, 2, 2, 3, 4] ['A', 'B', 'C', 'a', 'b', 'c'] ['a', 'A', 'b', 'B', 'C', 'c'] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [(1, 'D'), (2, 'C'), (3, 'B'), (4, 'E'), (5, 'A')] [(5, 'A'), (3, 'B'), (2, 'C'), (1, 'D'), (4, 'E')] [('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)] [('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)] '''