Python语义 - for循环声明中的多个参数

时间:2012-06-08 13:52:06

标签: python

很抱歉问一个愚蠢的问题,但有人可以告诉我以下是什么意思

for ctype, (codename, name) in searched_perms:

我不明白括号里会发生什么。 for ctype in serached_perms:会有意义。

我意识到答案是在某个地方的python文档中,但由于我不知道我在寻找什么,所以很难找到解释。

4 个答案:

答案 0 :(得分:6)

这实际上相当于

for x in search_perms:
     ctype, y = x
     codename, name = y

for x in search_perms:
    ctype = x[0]
    codename = x[1][0]
    name = x[1][1]

即,它将search_perms中的项目作为成对解包,然后将每对中的第二项解包为一对。

示例:

>>> d = {"ham": "yes", "spam": "no", "eggs": "please"}
>>> for k, v in d.iteritems():
...     print("%s? %s" % (k, v))
...     
eggs? please
ham? yes
spam? no
>>> for i, (k, v) in enumerate(d.iteritems()):
...     print("question %d: %s? %s" % (i, k, v))
...     
question 0: eggs? please
question 1: ham? yes
question 2: spam? no

这是有效的,因为enumerate(d.iteritems())生成了对,其中每个第二个元素又是一对:

>>> list(enumerate(d.iteritems()))
[(0, ('eggs', 'please')), (1, ('ham', 'yes')), (2, ('spam', 'no'))]

答案 1 :(得分:1)

ctype, (codename, name)(ctype, (codename, name))相同。因此,searched_perms需要是形式(a,(b,c))的一系列事物,并且在每次循环迭代中变量ctypecodename,{{1} }将设置为a,b,c。

答案 2 :(得分:1)

您的列表searchedparams应如下所示:

In [1]: L = []

In [2]: L.append(('a', ('b', 'c')))

In [3]: L.append(('d', ('e', 'f')))

In [4]: L
Out[4]: [('a', ('b', 'c')), ('d', ('e', 'f'))]

In [6]: for ctype, (codename, name) in L:
    print ctype, codename, name
   ...: 
a b c
d e f

('a', ('b', 'c'))是2个值的元组,其中正确的值也是两个值的元组。

答案 3 :(得分:0)

这意味着searched_perms是一个迭代过程中返回两个元素的迭代:第一个是ctype,第二个是元组,由另外两个元素组成:(codename, name)。所以searched_perms看起来像这样:

[[ctype1, (code1, name1)], [ctype2, (code2, name2)], ...]

语法for ctype, (codename, name) in searched_perms允许逐个元素地提取searched_perms中的所有内容。