Python - 函数继承 - 更改关键字参数

标签 python function inheritance keyword-argument

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

例如我有以下内容

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 构建到类中,也无需重新编写各种函数。

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

self.init_dist = f_beta

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

我看过以下内容:

并且没有找到任何答案,或者我应该在哪里寻找引用。

最佳答案

使用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
>>> 

关于Python - 函数继承 - 更改关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466312/

相关文章:

python - struct_time 和 datetime 之间有什么区别?

c++ - 硬编码值存储在哪里?

PHP get_called_class() 替代方案

python - 在 sqlalchemy 中按年、月、日分组

jquery - 如何在 HTML 中存储数据库项目列表?

python - Spyder 5.1.5 在运行自定义函数后创建新内核

mysql - 如何在 MySQL 中创建未附加到模式/数据库的函数?

javascript - 为什么在第一个 Promise 解析之后执行链式 Promise 后排队的微任务而忽略链式 Promise?

javascript - 我们可以称之为真正的原型(prototype)继承吗?

c++ - 为什么这段代码不起作用? (c++ OOP) 公共(public)继承