是否有這些任務之間有什麼區別(什麼)?:分配帶有或不帶圓括號的多個變量?
t=("a",5,2.1)
a,b,c = t
和
t=("a",5,2.1)
(a,b,c) = t
?
我在多個Web源中發現了這兩個版本,並且不知道第二個版本中的這些大括號是什麼。
是否有這些任務之間有什麼區別(什麼)?:分配帶有或不帶圓括號的多個變量?
t=("a",5,2.1)
a,b,c = t
和
t=("a",5,2.1)
(a,b,c) = t
?
我在多個Web源中發現了這兩個版本,並且不知道第二個版本中的這些大括號是什麼。
它們完全一樣。
您可以使用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
唯一的區別是可讀性。
@Tim單是返回語句是誤導。無論哪裏的優先順序都不是這樣,它們的括號是可選的。這包括其他上下文而不是返回語句,比如't = a,b'(就像問題中那樣)。括號甚至不是元組語法的一部分; **逗號**構成元組。只是逗號的優先級較低。請注意,像'a,= [1]'和't = 1這樣的行確實有效。 – delnan
最重要的是,您可以參考[作業文檔](http://docs.python.org/2/reference/simple_stmts.html#assignment-statements)來顯示兩個拼寫的結果相同。 –
它們對於return語句也是可選的。當你需要在另一個語法結構中指定一個元組時,你需要它們,比如調用一個函數my_function((「a」,5),2.1) – Tim
http://docs.python.org/2/tutorial/datastructures.html#tuples-and-sequences解釋了原因。 – rabs
對於本質,總是有[賦值語句的參考文檔](http://docs.python.org/2/reference/simple_stmts.html#assignment-statements)。 'target_list'是逗號分隔的一系列名稱,您可以將這些名稱放在括號和括號中。你甚至可以嵌套這些。 '(a,b),c =(1,2),3'完全合法。 –