2013-12-19 97 views
2

是一個數組; eventTokens是一個字符串(值的第一個元素)。雙重任務是做什麼的? (什麼是eventToken1 & eventToken2的價值觀?)Python - 從一個字符串分配2個變量

values = data.split("\x01") 

eventTokens = values.pop(0) 
eventToken1, eventToken2 = eventTokens 

我做了一個輸出任務(Python的來源),導致如下:

eventTokens is →☹ 
eventToken1 is → 
eventToken2 is ☹ 

我的結論是,不知何故瓦爾分割最初的字符串。但是,如果我試圖編譯的(顯然)類似的事情:

arr = ["some", "elements", "inarray"] 
c = arr.pop(0) 
a, b = c 
print c 
print a 
print b 

它導致一個例外:ValueError異常:值過多解壓

注:print是不是在測試環境中的參數化方法

回答

2

可變拆包是多個變量賦值於一行的Python的能力。約束條件是表達式右側的迭代必須與左側變量的長度相同。否則,您將得到too manyto little values to unpack例外。

如果你有大小2像eventTokens的字符串應該是,您可以:

>>>a,b = 'ab' 
>>>a 
'a' 
>>>b 
'b' 

這是非常不安全的代碼。如果不知何故eventTokens增長比兩個元素大,代碼將引發異常,您的程序將被關閉。

希望這會有所幫助!

3

c = arr.pop(0)回報"some"在這裏,但你想分配在此步驟中值爲2個變量(其中的有4個文字),因此,a, b = c失敗了。

嘗試此代替

arr = ["some", "elements", "inarray"] 
c = arr.pop(0) 
a, b = arr 
print c 
print a 
print b 
+0

這個答案不正確。你得到「太多值解包」錯誤的原因是因爲c有四個字符,你試圖將它解壓縮成兩個變量。 a,b,d,e = c會起作用。 – Jimothy

+0

@Jimothy我相信OP希望'a,b = arr'而不是'a,b = c',所以_this_示例工作 – karthikr

+0

你是對的。我應該說你爲什麼'a,b = c'給出錯誤的解釋是不正確的。 – Jimothy

3

由於eventTokens是長度爲2的串,它可以被解壓縮到兩個單字符的字符串:

>>> a, b = 'ab' 
>>> a 
'a' 
>>> b 
'b' 

但是,字符的字符串中的數量必須匹配被解包的變量的數量:

>>> a, b = 'abcd' 
ValueError: too many values to unpack 

請注意,你可以解壓到一個變量!

>>> a, = 'x' 
>>> a 
'x' 
>>> a, = 'xyz' 
ValueError: too many values to unpack 
相關問題