任何可迭代的對象均可以經過一個簡單的賦值操做來分解爲單獨的變量。惟一的要求是變量的總數和序列相吻合。python
p = (4,5) # tuple x,y = p print(x) data = ['alice', 50, 91.1, (2012,12,21)] # list & tuple name, shares, price, (year,mon,day) = data print(name) s = 'hello' # string a,b,c,d,e = s print(c)
在分解操做中,可能想丟棄某些特定的值。 一般能夠用一個用不到的變量名,以此做爲用不到的值的名稱。spa
data1 = ['amy', 45, 89.2, (2015, 8, 10)] _, shares, price, _ = data1 print(shares)
語法: *expr 對象
*expr 能夠聽任何位置,包括第一位。 不過不過若是可迭代對象的長度超過n,就會致使"too many values to unpack"的異常。blog
# 例一 record = ('dave', 'dave@example.com', '888-555-1212','746-666-1212') name, email, *phone_number = record print(phone_number) # 返回: ['888-555-1212', '746-666-1212'] # 例二 sales_record = [10,8,7,1,9,5,10,3] *trailing_qtrs, current_qtrs = sales_record print(trailing_qtrs) # 返回:[10, 8, 7, 1, 9, 5, 10] print(current_qtrs) # 返回:3 # 例三:*expr 常常用於迭代一個變長的元組數列。 record1 = [ ('foo',1,2), ('bar', 'hello'), ('foo', 3,4) ] def do_foo(x,y): print("foo", x, y) def do_bar(s): print("bar", s) for tag, *args in record1: if tag == "foo": do_foo(*args) elif tag == "bar": do_bar(*args) # 例四: 字符串處理,與string.split()一塊兒用 line = "nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false" uname, *field, homedir, sh = line.split(':') print(uname,"\t", homedir, "\t", sh) # 返回:nobody /var/empty /usr/bin/false
1.3 保存最後N個元素字符串