【问题标题】:a simplified signature in functools.partialfunctools.partial 中的简化签名
【发布时间】:2018-08-10 07:44:59
【问题描述】:

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

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

我可以理解大部分陈述,并承认“冻结”是一个微妙而准确的词来描述上下文。

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

【问题讨论】:

    标签: python


    【解决方案1】:

    在这种情况下,简化只是意味着更少的参数。如果你有

    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)
    

    【讨论】:

      【解决方案2】:

      函数签名是函数的名称,它的参数,严格来说,它的返回类型:

      mymodule.myfunction(foo, bar=None, *, baz=42)
      

      这是签名。当您partially 绑定一个函数时,它会返回一个新函数,通常参数较少,因为您已经绑定了一些参数:

      partial(mymodule.myfunction, bar='Mike')
      

      这个新的部分绑定函数的签名是:

      func(foo, *, baz=42)
      

      比原来的签名更简单

      【讨论】:

        【解决方案3】:

        签名表示函数的调用方式,如果你有一个需要五个字符串的函数,它的签名是

        foo (st1, st2, st3, st4, st5)
        

        如果你现在使用 partial 来冻结其中的三个,它只需要两个

        foo (st1, st2)
        

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

        希望对您有所帮助。

        【讨论】:

        • 令人印象深刻的是,您的名声较低,但与上述两位大师有相同的见解。泰。
        猜你喜欢
        • 2014-06-05
        • 1970-01-01
        • 1970-01-01
        • 2018-05-13
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多