我遇到了这段代码,我想知道这意味着什么:
typ, dat = imap_conn.search(None, search_string)
该行的typ, dat
部分究竟是什么意思?
答案 0 :(得分:7)
这是元组解包,请参阅Python documentation。如果你的函数返回一个元组,你总是可以使用类似于a, b = func()
的语法解压缩它。
此外,您可以动态使用元组,例如a, b = b, a
可用于交换两个值。
答案 1 :(得分:3)
typ, dat
是一个元组。在作业a, b = x
的左侧使用时,它相当于:
a = x[0]
b = x[1]
在您的示例中,typ, dat = imap_conn.search(None, search_string)
相当于:
search_res = imap_conn.search(None, search_string)
typ = search_res[0]
dat = search_res[1]
这种在赋值左侧编写元组的技术称为元组解包。
答案 2 :(得分:2)
在Python中,您可以根据以下代码分配和/或返回多个值:
def fn ():
return (7, 2)
(seven, two) = fn()
print seven
print two
print fn()
输出:
7
2
(7, 2)
我更喜欢显式元组语法(带括号的语法),因为我相信它会使意图更清晰。
答案 3 :(得分:0)
typ, dat = imap_conn.search(None, search_string)
右侧的表达式返回两个值,这两个值分配给左侧的两个变量。
答案 4 :(得分:0)
取决于返回的搜索内容。您可以使用该语法解压缩结果。例如:
>>>x, y = (1,2)
>>>x
1
>>>y
2
>>> x, y =[(1,2), [1,2,3,(1,2)]]
>>> x
(1, 2)
>>> y
[1, 2, 3, (1, 2)]
答案 5 :(得分:0)
这就是所谓的“解包”,我相信imap_conn.search(None, search_string
方法会返回2个值(可能是一个元组),这种表示法允许你一次性将它们分配给2个变量。
这相当于:
return_val = imap_conn.search(None, search_string)
typ = return_val[0]
dat = return_val[1]
答案 6 :(得分:0)
作业的语法在http://docs.python.org/reference/simple_stmts.html#assignment-statements
处给出assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)
target_list ::= target ("," target)* [","]
target ::= identifier
| "(" target_list ")"
| "[" target_list "]"
| attributeref
| subscription
| slicing
作业的左侧包含一个或多个target_list
,它们是逗号分隔的目标。然后将右侧的序列解压缩到每个目标中。请注意,该定义是递归的,因此您甚至可以执行以下操作:
a, [b, c, [d, e]], f = 1, (2, 3, (4, 5)), 6
但在每个级别,元素的数量和嵌套必须匹配。如果您使用的是Python 3,那么可以选择在target_list中包含*target
,这将吞下可变数量的参数。