Python Language
部分関数
サーチ…
前書き
あなたがOOP学校から来たかどうか分かっているように、抽象クラスを特化して使用することは、コードを書くときに留意すべき練習です。
異なるバージョンを作成するために抽象関数を定義し、それを特殊化することができたらどうでしょうか?それを特定のシナリオで信頼できるように特定のパラメータをバインドする、ある種の関数継承と考えます。
構文
- 部分(関数、** params_you_want_fix)
パラメーター
Param | 詳細 |
---|---|
バツ | 育てる数 |
y | 指数 |
上げる | 特殊化する機能 |
備考
Pythonのdocにあるようにfunctools.partial :
呼び出されたときに、位置引数argsとキーワードargumentsキーワードで呼び出されるfuncのように動作する新しい部分オブジェクトを返します。呼び出しにもっと多くの引数が与えられた場合、それらはargsに追加されます。追加のキーワード引数が指定された場合、それらはキーワードを拡張して上書きします。
部分的な実装方法を確認するには、 このリンクをチェックしてください。
力を上げる
xを数字yにすることを考えてみましょう。
あなたはこれを次のように書いています。
def raise_power(x, y):
return x**y
あなたのyの値が有限の値の集合を取ることができるなら、どうでしょうか?
yが[3,4,5]の 1つであると仮定しましょう。エンドユーザーに非常に計算量が多いので、そのような関数を使用する可能性を望んでいないとしましょう。実際には、提供されたyが有効な値になっているかどうかをチェックし、関数を次のように書き直します。
def raise(x, y):
if y in (3,4,5):
return x**y
raise NumberNotInRangeException("You should provide a valid exponent")
メッシー?抽象的なフォームを使用して、3つすべてのケースに特化しましょう: 部分的に実装しましょう。
from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)
そこで何が起こるの? yパラメータを修正し、3つの異なる関数を定義しました。
上で定義した抽象関数を使用する必要はありませんが( プライベートにすることもできます)、 部分的に適用された関数を使用して数値を固定値にすることができます。