Python 偏函数(functools.partial)详解

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在写 Python 程序的过程中,你可能遇到过这样的场景:一个函数参数特别多,但你经常只需要改其中一两个参数,其它都用默认值。这时候如果每次都手动传一堆参数就很烦,这就轮到 偏函数 上场了。它可以提前“固定”部分参数,返回一个新的函数,让你写代码更轻松、更简洁。

参考文章:Python 偏函数 | 简单一点学习 easyeasy.me

目录

  1. 什么是偏函数
  2. functools.partial 简介
  3. 为什么要用偏函数
  4. 基础用法示例
  5. 偏函数不是默认参数
  6. 和 lambda 的区别
  7. 小结

1. 什么是偏函数

“偏函数”这个词可能听起来有点抽象。简单来说,它就是:

固定函数的一部分参数,返回一个新的函数。

这个“新函数”调用时,只需要传剩下的参数就行了。

举个例子:

int('100', base=2)  # 二进制转十进制,结果是 4

我们如果总是处理二进制字符串,可以这么干:

from functools import partial
bin2int = partial(int, base=2)

print(bin2int('100'))  # 输出:4

这就用到了偏函数。


2. functools.partial 简介

Python 的标准库 functools 提供了一个叫 partial 的函数,它就是偏函数的实现方式。

from functools import partial

partial(func, *args, **keywords)
  • func:你想偏的函数
  • *args:你想提前固定的位置参数
  • **keywords:你想提前固定的关键字参数

返回的是一个“包了原函数”的新函数。


3. 为什么要用偏函数

  • 减少重复代码

很多时候你要多次调用一个函数,只变一个参数,其它都一样——那不如直接把这些一样的先固定住。

  • 更好地封装

偏函数可以帮助你把一个通用函数“定制化”,用于特定场景。

  • 提升可读性

代码读起来更清晰,比如 bin2int('1011')int('1011', base=2) 一目了然。


4. 基础用法示例

我们来看几个简单的例子,快速理解偏函数的基本用法。

示例1:字符串转数字

from functools import partial

# 创建一个专门处理二进制的 int 转换函数
bin2int = partial(int, base=2)

print(bin2int('1010'))  # 输出:10

示例2:固定某些参数

def greet(name, greeting, punctuation='!'):
    return f"{greeting}, {name}{punctuation}"

hi_john = partial(greet, 'John', 'Hi')
print(hi_john())         # Hi, John!
print(hi_john(punctuation='...'))  # Hi, John...

5. 偏函数 ≠ 默认参数

有同学可能会问:“那偏函数是不是跟函数的默认参数差不多?”

还真不是,虽然看起来相似,但有本质区别:

默认参数是写函数时定义的:

def greet(name, greeting='Hi'):
    ...

偏函数是“用函数的人”动态创建的:

hi = partial(greet, greeting='Hi')

偏函数更灵活,你不用改原函数定义,就能定制新函数行为。


6. 和 lambda 的区别

你可能也会用 lambda 写类似的逻辑:

bin2int = lambda s: int(s, base=2)

这和 partial 看起来差不多,对吧?

区别在于:

  • partial 更可读、语义清晰
  • lambda 更灵活,但可读性稍差
  • partial 还能被 pickle 序列化(有时候这很重要)

7. 小结

  • 偏函数是一种非常实用的小技巧,能帮你固定部分参数,生成新的函数;
  • functools.partial 就能实现;
  • 适用于减少重复、提高可读性、简化回调和封装;
  • 不同于默认参数和 lambda,更适合特定的编程风格。

不需要学太多奇技淫巧,掌握偏函数,就能让你的 Python 代码更优雅、更简洁。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值