基本上这很好用:
>>> x,y = "x=y".split("=")
>>> print x
x
但这会产生错误:
>>> for x, y in "x=y".split("="):
... print x
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
我想知道区别是什么,以及如何解决这个问题。
答案 0 :(得分:10)
拆分“=”会给你两个值:
"x", "y"
这些值与您的变量名匹配的事实是偶然的。你也可以这样做:
x,xx = "x=y".split("=")
我怀疑你可能计划的是列出一个清单:
"foo=bar,blah=boo,etc=something"
分开它,你可以做到:
for x,y in [ (pair.split("=")) for pair in "foo=bar,blah=boo,etc=something".split(",") ]:
print x,y
BUT!虽然它有效,但我认为将它分成单独的步骤要好得多,因为它更具可读性:
params = "foo=bar,blah=boo,etc=something"
pair_list = params.split(",")
for pair in pair_list:
x,y = pair.split("=")
...
答案 1 :(得分:2)
你可以做到
for x in "x=y".split("="):
# ...
您尝试迭代序列["x", "y"]
,但为序列的每个条目分配x, y
。这相当于
x, y = "x"
第一次迭代,没有任何意义。
答案 2 :(得分:1)
我不确定你为什么要这样做,但如果由于某种原因你想为此使用for
循环:
>>> for x, y in ["x=y".split("=")]:
... print x
... print y
...
x
y
答案 3 :(得分:0)
因为split函数返回一个列表。在for循环的上下文中,它一次获得一个项目。例如:'k=y'.split('=')
返回包含['k', 'y']
的列表。因为它在for循环中你得到'k',然后'y'。
它在for循环之外工作的原因是因为它在for循环中一次看到整个列表而不是一个项目,并且能够解压缩它。
要修复它,您可以将数据拆分为for循环外的元组列表,然后循环执行。例如:[('x', 'y'), ...]