【无标题】

Python 偏函数是通过 functools 模块被用户调用。

偏函数 partial 应用

函数在执行时,要带上所有必要的参数进行调用。但是,有时参数可以在函数被调用之前提前获知。这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。

偏函数是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数,除非使用关键字参数。

示例

from functools import partial
 
def mod( n, m ):
  return n % m
 
mod_by_100 = partial( mod, 100 )
 
print mod( 100, 7 )  # 2
print mod_by_100( 7 )  # 2

定义一个mod函数,接受两个参数m和n,返回一个n对m取余。
使用partial创建一个偏函数mod_by_100 = partial(mod, 100),第二个参数被固定为100.

调用偏函数

print(mod(100, 7))  # 输出 2
print(mod_by_100(7))  # 输出 2
  • 第一个 print 语句直接调用了 mod 函数,传入了两个参数 100 和 7。计算结果是 2,因为 100 % 7 等于 2。
  • 第二个 print 语句调用了偏函数 mod_by_100,只传入了一个参数 7。由于 mod_by_100 已经将 m 固定为 100,所以它计算的是 7 % 100,结果同样是 2。

关于偏函数,可以对现有函数进行加强。

>>>import functools
>>>int2 =functools.partial (int, base=2) # 把 int 的转换设为二进制了,这里 base 是 int 函数表示进制的参数。
>>>int2('1000000')

>>>64

>>>int2('1010101')
>>>85
# 在重设之后, 也可以在函数调用时传入其他值:>>> int2('1000000', base=10)  # 这里 base 变成了 10,覆盖了已设的默认值 2。
>>>1000000
#注意这里在创建新的偏函数后,依旧可以更改已经设置的默认值,但是必须清晰指出是更改了 base 的值。否则如果直接传如一个数值会报错:

>>>int2('100', 10)  # 报错,10 前未加 base=,不能分辨这是传给 base 的
# 原因如下:
# 创建偏函数时,实际上可以接收函数对象、*args 和 **kw 这 3 个参数,当传入:

>>>int2 =functools.partial(int, base=2)  # int 是函数对象,base=2 是 **kw,没有传入 *args 参数
#实际上固定了 int() 函数的关键字参数 base,也就是:

>>>int2('10010')
# 相当于:
>>>kw = { 'base': 2 }
>>>int('10010', **kw)  # 如果不指明 base=2 而只是传入 2 的话,那么 2 被认为是 *args 的值
# 当传入:

>>>max2 =functools.partial(max, 10)  # 这里的 10 显然就是作为 *args 里的值传入的,实际上会把 10 作为 *args 的一部分自动加到参数列表里去,也就是:

>>>max2(5,6, 7)  # 原本有 *args 的列表,然后会把 10 再加进去
# 相当于:
>>>args = (10, 5, 6, 7)
>>>max(*args)  # 结果为 10。

偏函数的好处

偏函数的一个主要好处是它们允许你创建一个特定行为的函数,而无需每次调用时都指定相同的参数。这在创建配置函数或将函数作为对象的回调方法时特别有用。

注意事项

偏函数是通过在新函数中覆盖原始函数的参数来创建的,而不是修改原始函数。原始函数始终保持不变。使用 partial 创建的偏函数仍然是函数,可以被赋予变量,通过函数调用传递,或者作为其他函数的参数。

总结

本文探讨了Python中的偏函数(Partial Function),它通过functools.partial实现,允许我们固定某个函数的一个或多个参数,从而简化调用。

核心概念
  • 偏函数创建:使用partial,可以预先设定函数的某些参数,创建一个新的函数版本。
  • 参数绑定:在偏函数中,可以绑定位置参数或关键字参数。
实际应用

偏函数非常适合于以下场景:

  • 简化函数调用,特别是当函数参数较多时。
  • 创建特定配置的函数版本,无需重复编写代码。
重要提示
  • 偏函数不会改变原始函数,它们是独立且可重用的。
  • 即使创建了偏函数,也仍可以传入新的参数,以覆盖或扩展默认值。

偏函数提供了一种灵活而高效的方法,帮助我们减少代码重复,同时提高函数的可读性和易用性。


参考资料:菜鸟教程

相关推荐

  1. 标题

    2024-04-24 03:42:04       47 阅读
  2. 标题

    2024-04-24 03:42:04       44 阅读
  3. 标题

    2024-04-24 03:42:04       42 阅读
  4. 标题

    2024-04-24 03:42:04       49 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-24 03:42:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 03:42:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 03:42:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 03:42:04       20 阅读

热门阅读

  1. ionic 中对Input输入框、select下拉框进行solr检索

    2024-04-24 03:42:04       15 阅读
  2. C++ day1

    C++ day1

    2024-04-24 03:42:04      14 阅读
  3. LeetCode-11-盛最多水的容器

    2024-04-24 03:42:04       15 阅读
  4. npm——基本使用

    2024-04-24 03:42:04       14 阅读
  5. CUDA_cudaFree_释放Stream_cudaError_t 错误类型码解释

    2024-04-24 03:42:04       15 阅读
  6. 算法训练营day21

    2024-04-24 03:42:04       12 阅读
  7. springCloud是什么,怎么创建

    2024-04-24 03:42:04       13 阅读
  8. 数据安全:口令

    2024-04-24 03:42:04       12 阅读
  9. try/catch 和 Promise.catch 捕捉错误的异同及使用限制

    2024-04-24 03:42:04       13 阅读
  10. Crash Course Computer Science

    2024-04-24 03:42:04       14 阅读
  11. HTML5音频标签

    2024-04-24 03:42:04       13 阅读