抱歉问了一个愚蠢的问题,但有人可以告诉我以下是什么意思
for ctype, (codename, name) in searched_perms:
我不明白括号里发生了什么。for ctype in serached_perms:
会有意义。
我意识到答案在某个地方的 python 文档中,但由于我不知道我在寻找什么,所以很难找到解释。
抱歉问了一个愚蠢的问题,但有人可以告诉我以下是什么意思
for ctype, (codename, name) in searched_perms:
我不明白括号里发生了什么。for ctype in serached_perms:
会有意义。
我意识到答案在某个地方的 python 文档中,但由于我不知道我在寻找什么,所以很难找到解释。
这实际上相当于
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'))]
ctype, (codename, name)
和 是一样的(ctype, (codename, name))
。因此,searched_perms
需要是 (a,(b,c)) 形式的事物序列,并且在每次循环迭代中,变量ctype
, codename
,name
将被设置为 a,b,c。
您的列表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 个值的元组,其中右值也是两个值的元组。
这意味着searched_perms
iterable 在迭代期间返回两个元素:第一个是ctype
,第二个是元组,由另外两个元素组成:(codename, name)
. 所以searched_perms
看起来像这样:
[[ctype1, (code1, name1)], [ctype2, (code2, name2)], ...]
该语法允许逐个元素for ctype, (codename, name) in searched_perms
地提取 中的所有内容。searched_perms