我是python的新手并尝试通过http://yuji.wordpress.com/2011/06/22/python-imaplib-imap-example-with-gmail/工作,其中包含以下行:
result, data = mail.uid('search', None, "ALL") # search and return uids instead
有人可以解释这一行吗?
谢谢。
答案 0 :(得分:4)
这意味着您调用的函数返回一个iterable,并将iterable的索引0
分配给x,并将索引1
分配给y。这称为tuple unpacking
。
Eg)的
>>> def func(a,b):
... return b,a
...
>>> a = 5
>>> b = 7
>>> a,b = func(a,b)
>>> a
7
>>> b
5
>>> x = func(a,b)
>>> x
(5, 7)
编辑以显示返回多个值,它们默认打包为元组,然后在另一端解压缩。由于此处只有一个变量x,因此将元组分配给x。
简单的函数,用于交换两个回答问题的变量(仅作为示例)
答案 1 :(得分:2)
至少,从python 2.7.x开始,该函数将解包从函数返回的2个参数的元组。如果它在元组中返回除了2个参数以外的任何内容,我相信如果你尝试解压缩超过这个,它会抛出一个错误。例如,如果它返回3个参数并解压缩2,则会出现异常。
例如:
def func(a):
return (a,a+1,a*2)
a,b,c = func(7)
print a,b
==> 7 8#NOTE值
a = func(3)
print a
==> (3,4,6)#注意:TUPLE
a,b = func(9)
print a,b
==>异常 - ValueError:解压缩的值太多
这可能与3.0 +不同。
答案 2 :(得分:1)
另一个答案是,“你调用的函数返回一个可迭代的”是一个很好的答案。这就是您的具体示例中发生的事情。这就是python中所谓的“解包”。以下是与您的问题相关的解包和分配示例:
>>> a,b = 1,2
>>> a
1
>>> b
2
>>> a,b,c = ['do', 're', 'mi']
>>> a
'do'
>>> b
're'
>>> c
'mi'
>>>
这是Python语法的一个很好的功能。如果我没有弄错的话,它也会被优化 - 即实现结果的最快方式。