2

Pythonがリストをパラメーターとして関数に渡すという奇妙な問題があります。コードは次のとおりです。

def foobar(depth, top, bottom, n=len(listTop)):
    print dir(top)
    print top.append("hi")
    if depth > 0:
        exit()
    foobar(depth+1, top.append(listTop[i]), bottom.append(listBottom[i]))

top = bottom = []
foobar(0, top, bottom)

dir(top)はタイプリストの完全な属性とメソッドリストを出力しますが、foobarではtopがNoneであるため、「AttributeError:'NoneType'オブジェクトには属性'append'がありません」と表示されます。では、何が問題なのですか?この再帰関数にパラメーターとして2つのリストを渡したかっただけです。

4

2 に答える 2

12

結果を関数に渡しtop.append()ます。top.append()Noneを返します:

>>> [].append(0) is None
True

.append()個別に電話してから、次のように渡す必要がありますtop

top.append(listTop[i])
bottom.append(listBottom[i])
foobar(depth+1, top, bottom)

n=len(listTop)関数の引数は冗長であり、一度だけ実行されることに注意してください。つまり、関数を作成するときです。関数を呼び出すたびに評価されるわけではありません。いずれにせよ、ここに投稿したバージョンからは安全に省略できます。

于 2012-11-25T21:15:48.973 に答える
2

top.append(listTop[i])所定の位置で動作し、戻りますNone

于 2012-11-25T21:15:07.367 に答える