在官方文档中解释functools
10.2. functools — Higher-order functions and operations on callable objects — Python 3.7.0 documentation
partial()用于部分函数应用程序,该应用程序“冻结”函数的参数和/或关键字的某些部分,从而生成具有简化签名的新对象。例如,partial()可用于创建行为类似于int()函数的可调用对象,其中基本参数默认为两个:
我可以理解大部分的声明,并承认“冻结”是描述上下文的精确而精确的词。
我无法理解的是“简化签名”,
它指的是哪种签名?
答案 0 :(得分:2)
在这种情况下,简化仅表示较少的参数。如果有
import functools
def func(a, b, x=8, y=9):
print((a, b, x, y))
simple_func = functools.partial(func, 1, x=2)
,然后simple_func
结束一个具有一个参数a
和一个关键字参数y
的函数:
>>> simple_func(3, y=4)
(1, 3, 2, 4)
答案 1 :(得分:2)
函数签名是函数的名称,其参数以及严格意义上的返回类型:
mymodule.myfunction(foo, bar=None, *, baz=42)
这是签名。当您partial
绑定一个函数时,它会返回一个新函数,该函数通常具有较少的参数,因为您已经绑定了一些参数:
partial(mymodule.myfunction, bar='Mike')
此新部分绑定的函数的签名为:
func(foo, *, baz=42)
比原始签名更简单的签名。
答案 2 :(得分:1)
签名表示函数的调用方式,如果您有需要五个字符串的函数,则签名为
foo (st1, st2, st3, st4, st5)
如果您现在使用partial冻结其中三个,则只需两个
foo (st1, st2)
这是“简化的”,因为它需要较少的参数。
希望有帮助。