2014-02-26 61 views
1

是否有這些任務之間有什麼區別(什麼)?:分配帶有或不帶圓括號的多個變量?

t=("a",5,2.1) 
a,b,c = t 

t=("a",5,2.1) 
(a,b,c) = t 

我在多個Web源中發現了這兩個版本,並且不知道第二個版本中的這些大括號是什麼。

+1

http://docs.python.org/2/tutorial/datastructures.html#tuples-and-sequences解釋了原因。 – rabs

+0

對於本質,總是有[賦值語句的參考文檔](http://docs.python.org/2/reference/simple_stmts.html#assignment-statements)。 'target_list'是逗號分隔的一系列名稱,您可以將這些名稱放在括號和括號中。你甚至可以嵌套這些。 '(a,b),c =(1,2),3'完全合法。 –

回答

4

它們完全一樣。

您可以使用dis模塊進行驗證。

>>> t=("a", 5, 2.1) 
>>> def first(): 
    a, b, c = t 

>>> def second(): 
    (a, b, c) = t 

>>> dis.dis(first) 
    2   0 LOAD_GLOBAL    0 (t) 
       3 UNPACK_SEQUENCE   3 
       6 STORE_FAST    0 (a) 
       9 STORE_FAST    1 (b) 
      12 STORE_FAST    2 (c) 
      15 LOAD_CONST    0 (None) 
      18 RETURN_VALUE   
>>> dis.dis(second) 
    2   0 LOAD_GLOBAL    0 (t) 
       3 UNPACK_SEQUENCE   3 
       6 STORE_FAST    0 (a) 
       9 STORE_FAST    1 (b) 
      12 STORE_FAST    2 (c) 
      15 LOAD_CONST    0 (None) 
      18 RETURN_VALUE 

唯一的區別是可讀性。

+0

@Tim單是返回語句是誤導。無論哪裏的優先順序都不是這樣,它們的括號是可選的。這包括其他上下文而不是返回語句,比如't = a,b'(就像問題中那樣)。括號甚至不是元組語法的一部分; **逗號**構成元組。只是逗號的優先級較低。請注意,像'a,= [1]'和't = 1這樣的行確實有效。 – delnan

+1

最重要的是,您可以參考[作業文檔](http://docs.python.org/2/reference/simple_stmts.html#assignment-statements)來顯示兩個拼寫的結果相同。 –

+0

它們對於return語句也是可選的。當你需要在另一個語法結構中指定一個元組時,你需要它們,比如調用一個函數my_function((「a」,5),2.1) – Tim

相關問題