使用reduce()函数
reduce()函数是Python内置的一个高阶函数,常常用来对列表等可迭代对象进行累积求值。其基本用法为:
reduce(func, sequence[, initial_value])
其中,func是一个需要接受两个参数的函数,sequence是一个可迭代对象,initial_value是可选参数,表示迭代的起始值。
使用reduce()函数的一般步骤如下:
-
定义一个函数,接受两个参数,返回值是两个参数的运算结果。
-
调用reduce()函数,将定义好的函数以及需要运算的可迭代对象作为参数传入。
下面是一个对列表进行求和的简单例子:
from functools import reduce
lst = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x + y, lst)
print(result) # 15
上面的代码中,使用了reduce()函数与lambda表达式,将列表中的元素累加求和。
再看一个稍微复杂一点的例子,对列表中的数进行乘积运算:
from functools import reduce
lst = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x * y, lst, 1)
print(result) # 120
上面的代码中,reduce()函数第三个参数为1,表示迭代的初始值是1。在对每个元素进行累积乘法时,初始值为1,否则结果会受到初始值的影响。
使用partial()函数
partial()函数的作用是固定函数的一些参数,返回一个新的函数。这在一些重复性高的函数使用中,可以省略一部分的参数传递,提高代码的可读性和可维护性。
partial()函数的用法为:
partial(function, *args, **keywords)
其中,function是需要被固定一些参数的函数,args是需要被固定的位置参数(以元组的形式传入),而*keywords是需要被固定的关键字参数(以字典的形式传入)。
下面是一个简单的示例,对一个列表中的元素加上10:
from functools import partial
lst = [1, 2, 3, 4, 5]
add10 = partial(lambda x, y: x+y, 10)
result = list(map(add10, lst))
print(result) # [11, 12, 13, 14, 15]
上面的代码中,使用了partial()函数,将lambda表达式中的第一个参数固定为10,返回一个新的函数add10。在map()函数执行时,传入add10作为函数参数,对lst中的每个元素进行加法运算。
再看一个稍微复杂一点的例子,使用partial()函数对函数进行封装,统计文件中某个字符串的出现次数:
import os
from functools import partial
def count(file_name, s):
if os.path.exists(file_name):
with open(file_name, 'r') as f:
text = f.read()
return text.count(s)
my_count = partial(count, s='python')
result = my_count('test.txt')
print(result) # 输出test.txt中python的出现次数
上面的代码中,使用了partial()函数对原函数count()进行封装,将第二个参数s固定为’python’。调用my_count()函数时,只需要传入文件名参数即可。