这里面我废话不多说,具体定义自己去看吧
1、高阶函数 : map/reduce/filter/sorted
map函数:
ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]
ls2 = [str(i) for i in ls]
ls3 = list(map(str, ls)) # map 函数
ls4 = list(map(lambda x: str(x), ls)) # map ➕ 匿名函数
print(ls2) # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
print(ls3) # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
print(ls4) # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
# 字典的map取值
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
print(list(map(lambda x: DIGITS[x], DIGITS))) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
reduce 函数
#reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
#reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
ls = [1, 2, 3, 4]
def add(x, y):
return x + y
result = reduce(add, ls)
print(result) # 10
例子2, 拼接 ls = [1, 2, 3, 4]
def func(x, y):
return x * 10 + y
result2 =reduce(func, ls)
print(result2) # 1234
reduce 和 map 函数的联合使用
print(reduce(lambda x, y: x * 10 + y, map(lambda x: DIGITS[x], DIGITS))) # 123456789
- filter函数的使用
filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
filter()这个高阶函数,关键在于正确实现一个“筛选”函数
例子1 只要奇数
def is_odd(n):
return n % 2 == 1
result1 = list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
result2 = list(filter(lambda x: x % 2 == 1, [1, 2, 4, 5, 6, 9, 10, 15]))
print(result1) # 结果: [1, 5, 9, 15]
print(result2) # 结果: [1, 5, 9, 15]
sorted 函数
Python内置的sorted()函数就可以对list进行排序
ls = [36, 5, -12, 9, -21]
sort_ls = sorted(ls)
print(sort_ls) # 结果: [-21, -12, 5, 9, 36]
加上参数 key
sort_ls2 = sorted(ls, key=abs)
print(sort_ls2) # 结果: [5, 9, -12, -21, 36]
key 还可以为 str.lower
ls = ["B", "a", "d", "C"]
sort_ls3 = sorted(ls)
print(sort_ls3) # 结果: ['B', 'C', 'a', 'd']
设置key = str.lower 表示全部小写,或者 key = str.upper 表示全部大写 也可以说忽略大小写
sort_ls4 = sorted(ls, key=str.lower)
print(sort_ls4) # 结果: ['a', 'B', 'C', 'd']
函数返回函数
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
print(fs[0]())
return fs
f1, f2, f3 = count()
fs = []
for i in range(1, 4):
def f():
return i * i
fs.append(f)
print(fs) # [<function f at 0x00000200F1FB6950>, <function f at 0x00000200F1FB69D8>, <function f at 0x00000200F1FB6A60>] 三个函数
print(f1()) # 最后得到的都是9
print(f2()) # 最后得到的都是9
print(f3()) # 最后得到的都是9
匿名函数 : lambda 表达式
举一个简单的例子:
lambda x: x+2
相当于:
def f(x):
return x+2
偏函数:
import functools
int2 = functools.partial(int, base=2)
int2('1000000') # 64
int2('1010101') # 85
装饰器函数:
这个在后面的文章中我会做一个详细的模块来单独拿出来写,这个还是比较重要的