python学习的第七天(六):偏函数详解

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

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

python偏函数的作用:

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

python偏函数的使用:

1

2

3

4

5

6

7

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是在函数参数的第二个位置,就认为它固定了第二个参数

1

2

3

4

5

6

import functools

int2 = functools.partial(int, base=2)

nt2('1000000')

64

nt2('1010101')

85

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

1

2

>>> 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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值