6

ここで括弧が2倍になっている理由を誰かに教えてもらえますか?

self.__items.append((module, item))
4

3 に答える 3

14

内側の括弧はタプルを作成します。

>>> type(('a', 'b'))
<type 'tuple'>

技術的には、タプルは括弧なしで作成できます。

>>> 'a', 'b'
('a', 'b')

ただし、括弧が必要な場合もあります。

>>> 'a', 'b' + 'c', 'd'
('a', 'bc', 'd')
>>> ('a', 'b') + ('c', 'd')
('a', 'b', 'c', 'd')

あなたの場合、タプルを関数のコンマ区切りの引数と区別するために括弧が必要です。例えば:

>>> def takes_one_arg(x):
...     return x
... 
>>> takes_one_arg('a', 'b')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: takes_one_arg() takes exactly 1 argument (2 given)
>>> takes_one_arg(('a', 'b'))
('a', 'b')
于 2012-04-19T22:45:00.353 に答える
9

タプル(module, item)を単一の引数として関数に渡します。module余分な括弧がないとitem、別の引数として渡されます。

于 2012-04-19T22:45:29.590 に答える
2

これは、次のように言うのとまったく同じです。

parameter = (module, item)
self.__items.append(parameter)

つまり、タプルがへの単一の引数として使用される前に、内側の括弧が最初にタプルを作成していappend()ます。

于 2012-04-19T22:46:29.313 に答える