Pythonでは、関数はファーストクラスのオブジェクトです。つまり、他の関数との間で関数を受け渡しすることができます。これは言語の非常に興味深い機能ですが、これが重要な意味で使用される古典的な例があるかどうか疑問に思っていましたか?または、この機能を使用する、またはエレガントに提示できるアルゴリズムがありますか?Pythonでの関数の受け渡しを使用する最も洗練されたアルゴリズム
答えて
依存性注入は古典的です。 これは、以下のようなことができることを意味しています。これは、process_dataに一連の論理を持たせるのではなく、decision_rootを使用して意思決定ツリーをさらに上げる意思決定ロジックをプッシュできるようにします。これにより、コードの基本的な多形性をより簡単に明らかにすることができます。機能・パッシングの最も偉大な力の
def process_data(data,analysis_func):
prepped_data = prep_data(data)
...
analyzed_data = analysis_func(prepped_data)
一つは「クロージャ」です。クロージャは、コードに取り付けられたデータであり、その一般的な使用である:
オブジェクト指向この実装一貫した機能シグネチャ
- 本当にクールなものです。関数内の値に変数をバインドして渡すことができると想像してください。誰でもバインディングを完了すると、その機能が開始されます。あなたは、次の簡単な例を参照してください可能性があります
def makeInc(x): def inc(y): # x is "attached" in the definition of inc return y + x return inc incOne = makeInc(1) incFive = makeInc(5) incOne (5) # returns 6 incFive(5) # returns 10
説明:Pythonで クロージャは、関数呼び出しによって作成されます。ここで、makeIncの呼び出しは、関数inc内で参照されるxのバインディングを作成します。 makeIncを呼び出すたびにこの関数の新しいインスタンスが作成されますが、各インスタンスにはxの異なるバインディングへのリンクがあります。
注:この回答は、pageに基づいています。
いい例は、validation_callback
というメソッドです。これは、wxpythonのUIウィジェットのバリデーターに役立ちます。
class CMyClass(object) :
# An object attribute
self._my_attr = a_value
# Define a validator for the widget self.textCtrl which is responsible for self._my_attr
self.textCtrl.SetValidator \
(CMyValidator \
(obj = self
, attr_name = '_my_attr'
, validation_callback = self.validation_callback
)
)
# Define a validation callback method for validations which are specific for this class
def validation_callback(self, value) :
# Do some validations specific to this class, e. g.
if not self._pattern.match(value) :
# Does not match the reqular expression stored in self._pattern
raise ValueError(myErrorValues)
基底クラスは:
CValidatorBase(object) :
def __init__(self, obj, attr_name, validation_callback=None) :
# ....
self._obj = obj
self._attr_name = attr_name
self._validation_callback = validation_callback
# ....
基底クラスのコンストラクタCValidatorBase
格納方法self._validation_callback()
への参照を属性CValidatorBase._validation_callback
に(与えられた場合、そうでなければなし残っていません)。この基底クラスで
次のようにメソッドvalidate()
があるかもしれません:あなたは_validation_callbackが継承クラスから供給された方法含めることができる属性を見るとわかるように
def validate(self, obj) :
# obj: the UI widget, get its value
my_value = self.get_my_value_form_obj(obj)
# First do some general validations
# e. g. if the value is required it must not be an empty string etc.
# then
if self._validation_callback : # is there a validation callback defined?
try :
#----------------------------------------
self._validation_callback(my_value) # this call is the answer of your question
#----------------------------------------
except ValueError, err:
# The validation_callback() should throw a ValueError-Exception (or another
# appropriate exception) in case of a validation error
# my_error_handler(obj, err)
。 self._validation_callback(my_value)
という電話番号は、実際にはCMyClass.validation_callback(my_value)
への電話番号です。
- 1. 最も洗練されたCSSレンダリングバグ(IE9)
- 2. Python - BeautifulSoup関数の書き直しに関するヒントをより洗練されたものにする
- 3. 洗練された洗練の使い方
- 4. パーティション洗練アルゴリズムのJavaScript
- 5. jquery関数をラップアップするより洗練された方法
- 6. Algolia Instantsearch:ページ間に洗練された値を渡します
- 7. HTML - セレクトオプションを使用するより洗練された方法
- 8. 洗練された制約Interval.Closedを使用してコンパイルエラー
- 9. 洗練された制約 "正"を使用してコンパイルエラー
- 10. ネストされた関数への引数の受け渡し
- 11. C++関数を使用したマルチディニオアニュアルアレイの受け渡し
- 12. 洗練されたチェックボックスのフォーム
- 13. AWS間の洗練されたjsonPathマッピングステップ
- 14. 複数の準備文のための洗練されたソリューション
- 15. Pythonで2D点のリストを作成するより洗練された方法
- 16. Sharepoint 2010洗練された年月日
- 17. より洗練されたxpathソリューション?
- 18. JQUERY洗練された選択
- 19. Tensorflow Java API - 洗練された例
- 20. Rのサブセット複数の列 - より洗練されたコード?
- 21. Pythonで2Dリストを扱うための洗練された方法
- 22. python - スタックデコレータによる関数引数の受け渡し
- 23. さまざまなJava外部ライブラリを管理する最も洗練されたソリューションは何ですか?
- 24. 重複するローカル変数の問題を洗練されたソリューションですか?
- 25. ループと配列用のBeanhellの洗練されたソリューション
- 26. 洗練
- 27. Optaplannerを使用して多数の顧客と洗練された制約を持つVRPTWを解決する
- 28. JavaScript - 最後の部分を見つけるための洗練された方法 "foo [biz] [bar]"
- 29. 自動サイズ変更+回転変換==>動作させる最も洗練されたソリューションは何ですか?
- 30. 製品、オプション、カテゴリの中で最も洗練されたMySQLスキーマは何ですか?
あなたの側の視点は? – Kruser
ユースケースについては、[戦略パターン](http://stackoverflow.com/questions/963965/how-to-write-strategy-pattern-in-python-differently-than-example-in-wikipedia)を参照してください。 –