2

くだらない質問で申し訳ありませんが、誰か次の意味を教えてください。

for ctype, (codename, name) in searched_perms:

括弧内に何が起こっているのかわかりません。for ctype in serached_perms:理にかなっています。

答えはPythonのドキュメントのどこかにあると思いますが、何を探しているのかわからないため、説明を見つけるのは困難です。

4

4 に答える 4

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アイテムをペアとしてアンパックし、各ペアの 2 番目のアイテムもペアとしてアンパックします。

例:

>>> 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())は、各 2 番目の要素が再びペアになるペアを生成するため機能します。

>>> list(enumerate(d.iteritems()))
[(0, ('eggs', 'please')), (1, ('ham', 'yes')), (2, ('spam', 'no'))]
于 2012-06-08T13:53:56.433 に答える
1

ctype, (codename, name)と同じです(ctype, (codename, name))。したがって、searched_permsは (a,(b,c)) の形式の一連のものである必要があり、ループの反復ごとに、変数ctypecodenamenameが a、b、c に設定されます。

于 2012-06-08T13:54:34.533 に答える
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 つの値のタプルで、右の値も 2 つの値のタプルです。

于 2012-06-08T13:55:37.310 に答える
0

これは、searched_permsが反復中に 2 つの要素を返す iterable であることを意味しctypeます(codename, name)。したがって、searched_perms次のようになります。

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

この構文により、要素for ctype, (codename, name) in searched_permsごとに のすべてのコンテンツを抽出できます。searched_perms

于 2012-06-08T13:55:06.647 に答える