我发现Python 3的functools
模块有两个非常相似的方法:partial
和partialmethod
。
有人可以提供使用每个人的好例子吗?
答案 0 :(得分:3)
partial
用于冻结参数和关键字。它会通过部分应用给定参数和关键字来创建一个新的可调用对象。
from functools import partial
from operator import add
# add(x,y) normally takes two argument, so here, we freeze one argument and create a partial function.
adding = partial(add, 4)
adding(10) # outcome will be add(4,10) where `4` is the freezed arguments.
当您要将数字列表映射到一个函数但保持一个参数冻结时,这很有用。
# [adding(4,3), adding(4,2), adding(4,5), adding(4,7)]
add_list = list(map(adding, [3,2,5,7]))
partialmethod
是python 3.4中引入的,它打算在类中用作方法定义,而不是可以直接调用
from functools import partialmethod
class Live:
def __init__(self):
self._live = False
def set_live(self,state:'bool'):
self._live = state
def __get_live(self):
return self._live
def __call__(self):
# enable this to be called when the object is made callable.
return self.__get_live()
# partial methods. Freezes the method `set_live` and `set_dead`
# with the specific arguments
set_alive = partialmethod(set_live, True)
set_dead = partialmethod(set_live, False)
live = Live() # create object
print(live()) # make the object callable. It calls `__call__` under the hood
live.set_alive() # Call the partial method
print(live())
答案 1 :(得分:2)
正如@HaiVu在他的评论中所说,在一个类定义中调用部分将创建一个静态方法,而partialmethod将创建一个新的绑定方法,当被调用时将自己作为第一个参数传递。