Python 使用reduce()和partial()

  • Post category:Python

使用reduce()函数

reduce()函数是Python内置的一个高阶函数,常常用来对列表等可迭代对象进行累积求值。其基本用法为:

reduce(func, sequence[, initial_value])

其中,func是一个需要接受两个参数的函数,sequence是一个可迭代对象,initial_value是可选参数,表示迭代的起始值。

使用reduce()函数的一般步骤如下:

  1. 定义一个函数,接受两个参数,返回值是两个参数的运算结果。

  2. 调用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()函数时,只需要传入文件名参数即可。