3

次のコードがあります。

def radixSort(A):

    #get max amount of digits

    A = sortByDigit(A, maxDigits) #this works
    print(A) #prints A as sorted

if __name__ == "__main__":
    A = [int(100*random.random()) for i in range(10)]
    radixSort(A)
    print(A) #prints unsorted

radixSort で A を変更しても main メソッドで A が変更されないのはなぜですか? radixSort に return ステートメントを追加し、main メソッドに代入ステートメントを追加するだけでよいことがわかりましたが、コードは次のテスト ケースに合格する必要があります。

    def testrRadixSort(self):
        A = [4, 3, 2]
        radixSort(A)
        self.assertEqual(A, [4,3,2])
4

5 に答える 5

1

問題は次の行にあります。

A = sortByDigit(A, maxDigits)

Aのグローバル コピーを上書きしないのローカル割り当てを作成しましたA

新しいリストを返すのではなくsortByDigit、 の内容を変更する必要があります。A

別の方法は、追加することです

global A

その行の前に、グローバルを変更しAます。

ただし、グローバル変数に関しては、以下の kindall のコメントを参照してください。

于 2013-10-28T01:37:24.033 に答える
0

この動作は、参照または値によって引数を渡すことに関するものです。StackOverflow には、この動作に関する優れた説明が既にあります。

つまり、指定されたリストを再割り当てすることはできませんが、appendメソッドなどを使用して既存のインスタンスを変更することはできます。

于 2013-10-28T01:36:48.487 に答える