functools.partial()的用法

转载于:https://www.cnblogs.com/wxys/p/13756552.html

如何使用python 中的functools.partial用法!
经常会看到有些代码中使用 functools.partial 来包装一个函数,之前没有太了解它的用法,只是按照别人的代码来写,今天仔细看了一下它的用法,基本的用法还是很简单的。
functools.partial 的基本使用
假设我们有一个函数, 返回传入参数加1的结果

def addOne(x)
	return x+1

正常调用这个函数很简单

会输出4, 这个很简单。
如果我们再根据 addOne 生成一个新的函数

def addOne(x)
	return x+1
add=functools.partial(addOne,3)
#调用add函数
print(add())

这时也会输出 4。
这个4是怎么来的?
首先我们通过 add = functools.partial(addOne, 3) 定义一个新的变量 add , 它相当于 addOne(3) 的结果,此时的变量add是一个函数,当执行add() 时,其实执行的是addOne(3),结果也是addOne(3) 的结果,这个add()函数返回的4也就是addOne(3)的结果,这个4就是这么来的。
复杂一点的例子
上面的addOne函数只有一个参数,我们多加一个参,让其返回两个参数的和

 def sum(x,y)
 	return x+y
 print(sum(5,6))
 sumY=functools.partial(sum,5)
 print(sumY(6))

输出结果:
print(sum(5, 6)) 这个输出 11 没有什么好说的, print(sumY(6)) 这个也输出11,这个是怎么来的?
当使用 sumY = functools.partial(sum, 5) 定义sumY变量时,其实是将 sum(x, y) 函数中的x值固定为 5 ,所以当调用sumY(6) 的时候,其实是返回的是sum(5, 6) 的值,也就是说,sumY函数不用再传入x参数,而是固定为5。
kwargs 类型的参数
当一个函数的参数为k,v的形式该怎么定义partial函数呢?

 def show(name="yyx",age=100)
 	return(name,age)
 	
 showP=functools.partial(show,age=18)
 
 print(show("yangyanxing"))

可以在定义 partial 函数时,将对应的参数定义好,如果上面的age=18, 则新生成的函数相当于 show(name=“yyx”, age=18)
注意,这里如果使用partial定义了函数的参数,那么再调用的时候,就不能再传相应的参数了,如上面的已经在showP函数中定义了age=18了,在调用showP()时,只能传name参数,即只能使用showP(“yangyanxing”), 不能再传入一个age参数, showP(“yangyanxing”, 28), 如果再加上age参数,则会报错。
functools.partial 有什么用?
从上面的使用来看,似乎使用functools.partial 也没有什么用,只是固定了某个参数的值,使原来的调用少传一个参数罢了,但是我们可能有某种函数场景,它的参数是也一个函数,比如回调函数。

def show(name="yyx",age=100)
 	print("my name is {} and age is {}".format(name,age))
 
 def test(callback):
 	print("do some opt…………")
 	callback()

我们定义一个test函数,它会先执行了自己的一些逻辑以后,会调用传入的callback函数,如果我们想将show函数当成callback参数传到test函数中,注意这里的callback函数是没有参数的,那么我们怎么将name和age参数传到show函数中呢?
我们可以改写test()函数

 def test(callback):
 	print("do some opt…………")
 	callback(name,age)
 

这种可以解决回调函数是show的情况,但是如果回调函数是别的呢?fly(h), eat(), run(date), 等等, 这种函数的参数你无法预知,你也不知道调用方会怎么调用,所以这时就可以使用 functools.partial 来生成一个新的函数

 def show(name,age)
 	print("my name is {} and age is {}".format(name,age))
 
 showP=functools.partial(show,"yangyanxing",19)
 
 def test(callback):
 	print("do some opt…………")
 	callback()
 	
 test(showP)

这样就可以在调用方自己来控制了函数的参数了。
上面的输出结果为

 do some opt…………
 my name is yangyanxing and age is 19

此文转载文,著作权归作者所有,如有侵权联系小编删除!
原文地址:https://www.tuicool.com/articles/ymUjuqY

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值