2011-07-12 10 views
0

完全なソースコードは、@PEP 333です。この2行:このコードの理解を助ける

status, response_headers = headers_sent[:] = headers_set 

..と..

headers_set[:] = [status, response_headers] 

は、私はここで何を探していますか? [:]と何も分かれていないのはどうしてですか(ちょうどheaders_set)?誰かが説明をすることができれば、本当にうれしいでしょう。

答えて

4

[:]は、リスト全体の内容を上書きすることを意味します。

>>> a = [1,2,3] 
>>> a[:] = [3,4] 
>>> a 
[3, 4] 
>>> a[] 
    File "<stdin>", line 1 
    a[] 
    ^
SyntaxError: invalid syntax 

そして、あなたはリストのいくつかのインデックスの範囲上書きする同じ構文を使用することができます。

>>> a[2:] = [3,4] 
>>> a 
[3, 4, 3, 4] 
+0

とやって違いを 'A = [1,2,3]'と '[: ] = [1,2,3] '?とにかく、イグナシオはそれにかなり答えました。 – maligree

+1

違いは 'a = [1,2,3]'はまったく新しいリストオブジェクトを作成し、そのリストを 'a'に格納し、古いリスト' a'への参照を破棄します。一方、 'a [:] = [1,2,3]'は参照されている古いリスト 'a'を取り、内容を' [1,2,3] 'に置き換えます。コメントは難しいですが、 'a = [1,2,3]; b = a; a = [4,5,6] '..' a'はdiffリストを指し示しますが、 'b'は引き続き古いリストを参照します。一方、 'a = [1,2,3]; b = a; a [:] = [4,5,6] '... aとbの両方がorigリストを参照しますが、今は' 4,5,6 'を含みます。 –