functools.partial中的简化签名

时间:2018-08-10 07:44:59

标签: python

在官方文档中解释functools 10.2. functools — Higher-order functions and operations on callable objects — Python 3.7.0 documentation

  

partial()用于部分函数应用程序,该应用程序“冻结”函数的参数和/或关键字的某些部分,从而生成具有简化签名的新对象。例如,partial()可用于创建行为类似于int()函数的可调用对象,其中基本参数默认为两个:

我可以理解大部分的声明,并承认“冻结”是描述上下文的精确而精确的词。

我无法理解的是“简化签名”,
它指的是哪种签名?

3 个答案:

答案 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)

这是“简化的”,因为它需要较少的参数。

希望有帮助。