1

値を返すこともあれば、値を返さないこともある関数があるとします。この場合、返すことができるものは実際には何もないためです。デフォルト値や何かでさえありません。今、あなたは結果を使って何かをしたいと思っていますが、もちろん結果がある場合に限られます。

例:

result = function_call(params)
if result:
    print result

これをよりPythonicな方法で、おそらく1行で書く方法はありますか?

そのように:

print function_call(params) or #nothing

(「nothing」または「None」を出力してはならないことに注意してください。結果Noneが.

4

3 に答える 3

5

いいえ; Python では、名前バインディングはステートメントであるため、ステートメント内で式として使用することはできません。もステートメントであるためprint、3行が必要になります。Python 3 では、次のように記述できます。

result = function_call(params)
print(result) if result else None

これは、名前バインディングがステートメントのようなセマンティクスを持つ構文項目である内包表記またはジェネレーター内の名前バインディングにはまったく当てはまりません。

[print(result) for result in generator_call(params) if result]

Kos が言うように、これを悪用して 1 要素内包表記を作成できます。

[print(result) for result in (function_call(params), ) if result]

名前バインディングを実行し、同様に悪用される可能性のある別の構文項目は、次のlambda式です。

(lambda result: print(result) if result else None)(function_call(params))

どちらの場合も、戻り値に対する操作はステートメントではなく式でなければならないことに注意してください。

于 2012-08-06T11:02:04.340 に答える
-1

今までの答えから、私はそれをします:

>>> from __future__ import print_function #if Python2.7
>>> def filtered_print(txt):
...    txt and print(txt)
...
>>> filtered_print('hello world')
hello world
>>> filtered_print('None')
None
>>> filtered_print(None)
>>>

他の誰かがより良い解決策を念頭に置いている場合でも、私はまだ代替案を受け入れています!

于 2012-08-06T12:06:34.677 に答える