言語でサポートされている場合、通常はラベル付き匿名関数を使用してこれを実現します。
someCondition = lambda p: True if [complicated expression involving p] else False
#I explicitly write the function with a ternary to make it clear this is a a predicate
if (someCondition(p)):
#do stuff...
私見これは、複雑な式がif
条件を乱雑にしない一方で、小さなスローアウェイラベルでグローバル/パッケージの名前空間を乱雑にしないことの読みやすさの利点を与えるので、良い妥協です。関数 "definition"が使用されている場所で適切であり、定義の変更と読み取りが容易になるという利点もあります。
述語関数である必要はありません。私はこのような小さな関数にも繰り返しボイラープレートを入れるのが好きです(ブラケット構文を乱雑にすることなくpythonリストの生成に特にうまく機能します)。たとえば、PythonでPILを使用する場合の次の簡単な例
#goal - I have a list of PIL Image objects and I want them all as grayscale (uint8) numpy arrays
im_2_arr = lambda im: array(im.convert('L'))
arr_list = [im_2_arr(image) for image in image_list]