2

私はこれが初めてです。誰かが私の基本的な質問を手伝って、私の概念を明確にするのを手伝ってくれることを願っています。

コードを短くするためにいじっていましたが、2番目のケースは機能しませんでした。

remove() は何も返さないので、うまくいかなかったと思います。あれは正しいですか?

これは私に不思議に思った。何も返さない書き込み関数が必要なのはいつですか? 使い慣れたものでも返品するのはよくないですか?何も返さない関数をどのように操作しますか。

s = 'abc'

# This remove a from the abc
x = list(s)
x.remove('a')

# if remove() can return the list this would be simpler
x = list(s).remove('a')
4

4 に答える 4

4

多くのプログラマーは、コマンドとクエリの分離として知られている方法を支持しています。値を返す関数 (クエリ) には一般に副作用はありませんが、副作用のある関数は、一般にあまり興味深いデータを返さないコマンドです。この分離には、グローバルな状態の変化を追跡しやすくするという意図があります。

于 2013-07-13T15:03:14.207 に答える
2

これはスタイルの問題です。私と他の多くの人は、一般に、関数が何かを返す方がはるかに便利であることに同意します。特に、チェーンを許可するのselfではなく、返すオブジェクトのメソッドです。None

残念ながら、これは Python コミュニティのほとんどの人が行っていることではなく、組み込みライブラリの作成者が行っていることでもありません。これに対処する方法を学ぶ必要があり、スタイルが普及していることを考えると、スタイルの切り替えに対処するか、支配的なパラダイムに準拠するかを決定する必要があります。

于 2013-07-13T14:56:59.163 に答える
2

return関数は常に何かを返します:関数の呼び出し中に実行されるものがなければ、Noneが返されます。

次のコードのように、areturnにつながる条件のいずれも True の結果を与えない場合、呼び出し中にnoが実行されることがあります。return

def f(x):
    if x==2:
        return 'hello'

y = f('brouef')

print 'y ==',y

それは印刷します

y == None

returnこれは、次のコードのように、関数のコード ブロックにステートメントがない場合にも発生する可能性があります。

.

とはいえ、アルゴリズムは常に関数の戻り値を使用する必要はありません。関数は、 以外のものを返すことなく何かを変換できますNone
例えば:

li = [1000]

def f(x):
    for i in xrange(100):
        if i%3==0 and not i in range(20,85):
            li.append(i)

print li
f(li)
print li

結果

[1000]
[1000, 0, 3, 6, 9, 12, 15, 18, 87, 90, 93, 96, 99]

sort()これは、たとえば、ソートされたオブジェクトがその場で変更されたことをコーダーに十分に認識させるために採用された選択です。それはドキュメントで言われています。

于 2013-07-13T14:57:19.017 に答える
0

関数の目的が、グローバル変数の変更、入出力の実行、または副作用のある他の関数の呼び出しなど、副作用を発行することである場合は意味があります。そして最後に、「値なし」はそれ自体が戻り値であるため、たとえば C プログラミング言語の関数は戻り値の型 void でタグ付けされます。

関数型プログラミング言語は、副作用を悪いものと見なし、それらを制限します。

于 2013-07-13T14:49:20.947 に答える