2016-05-26 21 views
1

関数を特定のキーワード引数で定義してから、同じキーワードを使って同じ関数を参照することはできますか?Python - 関数継承 - キーワード引数の変更

私は、次の

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は初期関数のコピーである、と gは同じ機能です
f = f_beta 
g = f_beta(a=1.0, b=10.0) 

しかしごとに異なるデフォルト値でキーワード引数f_betaをクラスに組み込む必要なく、またさまざまな関数を書き直す必要なく、gのためにこれを行う方法がありますか?

モチベーション:

self.init_dist = f_beta 

と新しい機能に通過できるようにしたい: 私はいくつかの点で私は介し__init__()で定義メンバ関数init_distを持つクラスを作成しました。

をし、どんな答えを見つけるか、どこで参照のためになるはずで運を持っていない:

私は次で見てきました。

答えて

4

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

。ありがとう@ブラックベア – oliversm