多くの異なるプロジェクトで、(適度に複雑で、おそらく評価にコストがかかる)式を評価し、それを使って何かを行う(たとえば、文字列のフォーマットに使用する)必要がある多くのコードを書いていることがわかりましたが、式がTrue/non-Noneの場合のみ。
たとえば、多くの場所で、私は次のようなことをすることになります。
result += '%s '%( <complexExpressionForGettingX> ) if <complexExpressionForGettingX> else ''
...これは基本的に、式の関数を返したいというより一般的な問題の特殊なケースですが、その式がTrueの場合に限ります。
f( e() ) if e() else somedefault
ただし、式を再入力する必要はありません(または、コストのかかる関数呼び出しの場合は、式を再評価します)。
明らかに、必要なロジックは、さまざまな長い方法で簡単に実現できます(たとえば、式を複数のステートメントに分割し、式を一時変数に割り当てることによって)が、それは少し厄介であり、これは非常に一般的な問題のように思われるため、 Pythonはかなりクールなので(特に機能的なものの場合)、それを行うための素晴らしい、エレガントで簡潔な方法があるかどうか疑問に思いました。
私の現在の最良のオプションは、それを処理するために短命のラムダを定義することです(複数のステートメントよりも優れていますが、少し読みにくいです):
(lambda e: '%s ' % e if e else '')( <complexExpressionForGettingX> )
または、次のような独自のユーティリティ関数を記述します。
def conditional(expr, formatStringIfTrue, default='')
...しかし、私はこれを多くの異なるコードベースで行っているので、組み込みのライブラリ関数またはそのようなものが存在する場合はいくつかの巧妙なPython構文を使用したいと思います