首页 > 编程语言 > 详细

python偏函数

时间:2019-05-22 15:59:32      阅读:96      评论:0      收藏:0      [点我收藏+]

python偏函数是一个很有用的函数方法,掌握后,绝对对于以后打码过程能剩下很多麻烦事

在调用函数时,有时你想要固定其中的一两个函数,但如果没有偏函数来固定其中的函数参数,你每一次调用都要输出函数要求的所有参数,这样很麻烦

python偏函数的作用:

可以将一个或多个参数预先赋值,以便函数能用更少的参数进行调用。

python偏函数的使用:

def mod( n, m ):
  return n % m
 
mod1 = partial( mod, 100 )
 
print mod( 100, 7 )  # 2
print mod1( 7 )  # 2

从这个例子可以知道,运用偏函数可以将我们mod函数的第一个参数固定。

注意:不是说在mod1=partial(mod,100)中100是在函数参数的第二个位置,就认为它固定了第二个参数

import functools
int2 = functools.partial(int, base=2)
nt2(‘1000000‘)
64
nt2(‘1010101‘)
85

  可以更改base的值,就是更改了默认值

>>> int2(‘1000000‘, base=10)
1000000

  

注意:

这里在创建新的偏函数后,依旧可以更改已经设置的默认值,但是必须清晰指出是更改了 base 的值。

否则如果直接传如一个数值会报错:

比如你改成

int2(‘1000000‘,10)
这是错误的,你没有明确指出base要改成10,应该得完整写出来int2(‘1000000‘,base=10)
原因:

创建偏函数时,实际上可以接收函数对象、*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)

python偏函数

原文:https://www.cnblogs.com/lsl30522/p/10906080.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!