Python3のPHPにfunction_exists
のようなものがありますか?以下のために、function_exists for PHP python3
["_and", ["_tautology"], ["tautology"]]
とPythonの文の中にそれを回すしたい:私は次のように(一部のWeb UIを介して)ユーザーが(いくつかの奇妙なlispのような構造で)JSONでの簡単なルールを定義することができます何かを実装していますただ、好奇心の外に
_and(_tautology(), _tautology())
にその元JSONルールを回すことによって、インスタンス、これらの機能
import operator
from functools import reduce
def _and(*args):
return lambda context: reduce(operator.and, [arg(context) for arg in args], True)
def _tautology(*_):
return lambda *__: True
は、タスクのこの種のために作られたast
のですか?私は以前これをやっていましたが、私はスケーラブルなものを探しています。
mapping = {'_and': _and}
に追随し、リストが成長し続けると、より多くのコードでの結果ではなく、それらを実装するので、文字列値が何を意味するのかを説明するために入力されたことでしょう。同様に、これは事実上の辞書を維持した前に私がやったので、それとも別のルールエンジンを使用したはずですか?ルールの一つが
["_and", ["_equals", "fieldA", "some_value"],
["_equals", "fieldB", "some_other_value"]]
が_equals
を想定すると、次のようになりますので、ルールが
_and(_equals('fieldA', 'some_value'),
_equals('fieldB', 'some_other_value'))
TLに展開されるように
def _equals(field_name, value):
return lambda context: context[field_name] == value
であり、DR
メイン質問:はPython3のためにfunction_exists
のようなものがありますが、これにはが適していますか? セカンダリ質問:代わりに何らかの種類のルールエンジンを使用する必要がありますか?
重複質問レポートについていいえ、変数が存在するかどうかは確認していません。文字列値と同じ名前の関数があるかどうかを知りたい。たとえば、文字列が'_and'
の場合、_and
という名前の関数があるかどうかを知りたいのですが、この識別子が実際に関数であるかどうかを調べようとはしません。
http://stackoverflow.com/questions/843277/how-do-i-check-if-a-variable-exists-in-python – Morton
この種のタスクでは、自動的に関数を登録するデコレータを作成する必要があります名前に基づくマッピングに変換します。人生を楽にします。 –
http://stackoverflow.com/questions/9390126/pythonic-way-to-check-if-something-existsを使用して「foobarが定義されていますか」を確認します。 "foobar"は関数なのかどうかを判断するにはhttp://stackoverflow.com/a/18704793/1191425を参照してください。 –