2013-12-19 47 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 
相关问题