【问题标题】:Python - Functional inheritance - changing keyword argumentsPython - 功能继承 - 更改关键字参数
【发布时间】:2016-09-24 18:43:19
【问题描述】:

是否可以使用某些关键字参数定义一个函数,然后引用同一个函数,但使用不同的关键字参数值。

例如我有以下

def f_beta(x,a=2.7,b=3.05):
    """The un-normalised beta distribution function."""
    return math.pow(x, a - 1.0)*math.pow(1.0 - x, b - 1.0)

我想做一些相当于:

f = f_beta
g = f_beta(a=1.0, b=10.0)

其中f 是初始函数的副本,g 是相同的函数,但关键字参数的默认值不同。有没有办法为g 执行此操作,而无需将f_beta this 构建到一个类中,也无需重新编写各种函数。

动机: 我创建了一个具有成员函数init_dist 的类,在某些时候我在__init__() 中通过以下方式定义:

self.init_dist = f_beta

并且希望能够传入一个新函数。

我看过以下内容:

并且没有找到任何答案,或者我应该在哪里寻找参考资料。

【问题讨论】:

    标签: python function inheritance keyword-argument


    【解决方案1】:

    使用functools.partial:

    Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from functools import partial
    >>> import math
    >>> def f_beta(x,a=2.7,b=3.05):
    ...     """The un-normalised beta distribution function."""
    ...     return math.pow(x, a - 1.0)*math.pow(1.0 - x, b - 1.0)
    ... 
    >>> f = f_beta
    >>> g = partial(f_beta, a=1.0, b=10.0)
    >>> f()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: f_beta() takes at least 1 argument (0 given)
    >>> g()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: f_beta() takes at least 1 argument (2 given)
    >>> g(13)
    -5159780352.0
    >>> f(13, 1.0, 10.0)
    -5159780352.0
    >>> 
    

    【讨论】:

    • 正是我想要的。谢谢@BlackBear
    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2014-02-27
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多