2

重複の可能性:
Python の list と list[:] の違いは何ですか?

私はPythonを初めて使用するので、次の質問に対する回答が見つからない状況に遭遇しました。

これはPythonで何を意味しますか?

l[:] = process_list(l)

lタイプですlist

基本的に、process_list メソッドの応答に基づいて、変更したい (古い値を新しい値で上書きする) グローバルに宣言されたリストがあります。私がこのようにしようとすると:

l = process_list(l)

私はこれを得る:Unresolved reference 'l'

何が違うのか、また私が現在使用している最初のアプローチが良いものかどうかを説明していただけますか?

4

2 に答える 2

4

関数では、ローカル変数である可能性のある名前への割り当ては、グローバルをシャドウしている場合でも、その名前でローカル変数を作成します。

a = None
def foo():
    a = 5  # local 'a' shadows global 'a'

スライスの割り当ては変更であり、割り当てではないため、名前は引き続きグローバルを参照します。

a = [1, 2, 3]
def foo():
    a[:] = [5]  # modifies global 'a'

これUnresolved referenceは、グローバルをシャドウイングするローカル変数を作成することにより、グローバルが表示されなくなるために発生します。あなたが望むことをする別の方法は、使用することかもしれませんglobal

a = None
def foo():
    global a
    a = 5  # rebinds global 'a'
于 2012-12-10T17:28:02.807 に答える
2

list[:] = whatever 既存のリストの内容を変更します

( に置き換えるlist = whateverのではなく) ...ちなみにlistひどい変数名です...

于 2012-12-10T17:26:44.033 に答える