【问题标题】:Python, assign function to variable, change optional argument's valuePython,将函数分配给变量,更改可选参数的值
【发布时间】:2016-01-03 05:11:10
【问题描述】:

是否可以将函数分配给具有修改的默认参数的变量?

为了更具体,我举个例子。 以下显然不适用于当前形式,仅用于显示我需要的内容:

def power(a, pow=2):
    ret = 1
    for _ in range(pow):
        ret *= a
    return ret

cube = power(pow=3)

cube(5) 的结果应该是125

【问题讨论】:

    标签: python function


    【解决方案1】:

    functools.partial 救援:

    返回一个新的部分对象,当调用它时,它的行为类似于使用位置参数 args 和关键字参数关键字调用的 func。如果为调用提供了更多参数,则将它们附加到 args。如果提供了额外的关键字参数,它们会扩展和覆盖关键字。

    from functools import partial
    
    cube = partial(power, pow=3)
    

    演示:

    >>> from functools import partial
    >>> 
    >>> def power(a, pow=2):
    ...     ret = 1
    ...     for _ in range(pow):
    ...         ret *= a
    ...     return ret
    ... 
    >>> cube = partial(power, pow=3)
    >>> 
    >>> cube(5)
    125
    

    【讨论】:

      【解决方案2】:

      使用partial的答案很好,使用标准库,但我认为值得一提的是,以下方法是等效的:

      def cube(a):
         return power(a, pow=3)
      

      尽管这看起来不像赋值,因为没有=,但它做的事情大致相同(将名称绑定到函数对象)。我认为这通常更清晰。

      【讨论】:

        【解决方案3】:

        具体来说,指数有一个特殊的功能:

        >>> 2**3
        8
        

        但我也用 lambda 函数解决了这个问题,它是函数指针的更好版本。

        # cube = power(pow=3)  # original
        cube = lambda x: power(x,3)
        

        【讨论】:

        • 这只是一个让我清楚我需要什么的例子。我不是在寻找 power 或 cube 函数的实现。
        • 这是最好的答案!
        猜你喜欢
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        相关资源
        最近更新 更多