python语法中'x,y ='的含义是什么?

时间:2013-12-05 01:14:51

标签: python

我是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

有人可以解释这一行吗?

谢谢。

3 个答案:

答案 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语法的一个很好的功能。如果我没有弄错的话,它也会被优化 - 即实现结果的最快方式。