12

AI は、PEP 8 に関連するものを見つけることができませんでした。戻り値のない関数の最も Pythonic な構文についてのあなたの考えに興味がありますか?

return 行のない関数を禁止する理由はありますか (例 3)?

例 1:

def foo():
   print 'foo'
   return None

例 2:

def foo():
   print 'foo'
   pass

例 3:

def foo():
   print 'foo'
4

5 に答える 5

18

複雑にしないでおく。例 3 は最も Pythonic な方法です。

>>> import this

The Zen of Python, by Tim Peters

...
Simple is better than complex.
...
于 2012-11-09T11:24:59.657 に答える
15

次の 2 つの使用例があります。

  • 何も返さない関数 (別名「プロシージャ」)。return は完全に省略してください。
  • 一部の入力に対して None を返す関数。return Noneそうしないと、読者が少し混乱する可能性があるため、個人的にはそこに置くことを好みます。

例:

 def find_user(name):
     if database.is_ready():
        return database.find_user_by_name(name)
     else:
        return None

技術的には、elseパーツを削除することはできますが、そうすると機能がわかりにくくなります。

于 2012-11-09T11:26:10.590 に答える
7

関数が値を返す場合、それはNone場合によってreturn Noneは良いことです。

関数が値を返さないが、早期に返したい場合は、returnパラメーターなしで使用します。最後の行は省略できます。

pass何もせず、構文エラーを回避するためにステートメントが必要な場合 (たとえば、空のクラス) にのみ役立ちます。

于 2012-11-09T11:26:03.773 に答える
-1

他の人が述べているように、オプション 3 が断然ベストです。

Noneオプション 3 が良い考えであるさらに多くの理由は、 (他の言語では別名null) は一般的に決して返されるべきではなく、例外をスローするか、Null オブジェクト パターンを使用する必要があるという意見を多くの人が持っているためです。None私はそれに完全に同意するわけではありませんが、意味的に意味がなく、あいまいな場合に特に明示的に使用することを避けるのに有効なポイントがあると思います.

二度と戻ってはいけないと言っているわけではありませんNoneが、一般的には良い考えではないと思います.

これは、今日の Python でもblah['DOESNOTEXIST']発生し、どこで例外がスローされ、Java ではmap.get("DOESNOTEXIST")が返されnullます。

于 2012-11-14T14:58:53.983 に答える