2016-11-06 19 views
-4

私の関数はリストを変更するだけです。しかし、 'None'でも何も返さず、 'None'を返すことは望ましくありません。これを修正する方法はありますか?return文はありませんがまだ返されていません。

+0

関数は暗黙の 'None'でも* something *を返す必要があります。その周りに道があるとは思わない。 – Aurora0001

+3

return文のないPython関数は、デフォルトで 'None'を返します。それがまさにそれです。あなたは何を返しますか?あなたが何かを返そうとしないなら、あなたは 'None'のように*何も返さないでおくことをお勧めします。それはそれを行う慣用的な方法です。 – idjaw

+1

「何も返さない」というのは正確に何を意味しますか?それはどのように機能しますか? (例えば 'x = foo()'はどうすればいいですか?) – melpomene

答えて

1

TL;いいえ、Pythonでのデフォルト戻り値の意味はありません。None

Pythonでは、暗黙のうちに「None」を返すことは、「何も返さない」ことに最も近い方法です。これは、例えば、 Cの場合、void関数宣言は変数への代入を禁止します。

x = MyFunc() 

xにいくつかの値を定義し、保存しなければならないため、この動作は、一貫性のためのPython言語の一部です。同様に、すべてが何らかの行動を持っている必要があり、このような

OtherFunc(1, 2, MyFunc()) 

または

[ 1, 2, 3, MyFunc() ] 

または

MyFunc() * 3 

として使用しています。暗黙の戻り値Noneで、これらの問題はPythonで特定の方法で解決されます。

それははこの方法であることを持っていない - 誰かが再設計した場合にはPythonのこの部分は、いくつかの異なる自己矛盾のアプローチがあるかもしれない、原則的に - たとえばPythonのいくつかの特別な価値を持つことができますそれは関数呼び出しからのみ返すことができ、エラーを発生させる可能性のある他の式の中に含まれていることが判明した場合に発生します。 3 * MyFunc()のような場合には、戻り値Noneとなります。はこのようにエラーを発生させますが、関数の定義に基づいて、起こりうるすべての望ましくないシナリオですぐにそれに頼ることはできません。

しかし、Pythonは暗黙的にNoneを返します。これを変更すると、グローバルな振る舞いに依存するすべてのコード/ライブラリに影響を与えるか、機能定義内で機能を使用する必要があるため、厄介なコンテキスト解析要件を言語に追加する必要があります。

関連する問題