将给定函数应用于可迭代对象的每个元素,并返回一个新的迭代器,通常用于对序列进行批量操作。
nums = list(range(6))
nums
[0, 1, 2, 3, 4, 5]
squares = map(lambda x: x * x, nums)
list(squares)
[0, 1, 4, 9, 16, 25]
用于筛选序列,返回一个迭代器。根据提供的函数对序列中的每个元素进行判断,仅保留使该函数返回值为 True 的元素。
even_nums = filter(lambda x: x % 2 == 0, nums)
list(even_nums)
[0, 2, 4]
将列表中的元素按照一定的顺序排序,可以接受一个 key 函数来自定义排序行为。
students = ["Alice", "bob", "Charlie", "dave"]
sorted(students)
['Alice', 'Charlie', 'bob', 'dave']
sorted(students, key=str.lower)
['Alice', 'bob', 'Charlie', 'dave']
用于判断可迭代对象中的所有元素是否都满足某个条件。如果所有元素都满足条件,则返回 True,反之返回 False。当可迭代对象为空时,返回 True。
all([])
True
is_even = map(lambda x: x % 2 == 0, nums)
all(is_even)
False
用于判断可迭代对象中是否至少有一个元素满足某个条件。如果至少有一个元素满足条件,则返回 True,反之返回 False。当可迭代对象为空时,返回 False。
any([])
False
any(is_even)
True
用于将可迭代对象转换为一个索引序列,返回一个包含索引和元素的元组的迭代器。
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(index, fruit)
0 apple 1 banana 2 cherry
用于将多个可迭代对象打包成一个元组的迭代器。
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]
list(zip(names, scores))
[('Alice', 85), ('Bob', 90), ('Charlie', 95)]
用于对序列进行累积操作,它将序列的前两个元素传给函数,然后返回一个值,再将这个值与序列的下一个元素一起传给函数,直到序列中的所有元素都被处理完毕。
import functools
functools.reduce(lambda x, y: x + y, nums)
15
用于固定函数的某些参数,并返回一个新的函数,这在创建函数变体时非常有用。
def greet(name, place):
return f"Hello, {name} from {place}!"
greet_world = functools.partial(greet, place="world")
greet_world("Henry")
'Hello, Henry from world!'
这是一个装饰器,用于缓存函数的返回值,优化性能,避免重复计算,对计算密集型函数非常有用。
def fib1(n):
if n < 2:
return n
return fib1(n - 1) + fib1(n - 2)
@functools.lru_cache(maxsize=32)
def fib2(n):
if n < 2:
return n
return fib2(n - 1) + fib2(n - 2)
print(fib1(10))
print(fib2(10))
55 55
%timeit fib1(10)
%timeit fib2(10)
19.4 µs ± 932 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each) 72.7 ns ± 3.44 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
提供了许多用于操作迭代器的高阶函数,如 chain()
, combinations()
, permutations()
, cycle()
, repeat()
, groupby()
等。
import itertools
items = ["A", "B", "C"]
list(itertools.combinations(items, 2))
[('A', 'B'), ('A', 'C'), ('B', 'C')]
list(itertools.permutations(items, 2))
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
list(itertools.repeat(items, 2))
[['A', 'B', 'C'], ['A', 'B', 'C']]