Может ли кто-нибудь сказать мне, почему круглые скобки удваиваются здесь?Python: Что делают двойные скобки?
self.__items.append((module, item))
Может ли кто-нибудь сказать мне, почему круглые скобки удваиваются здесь?Python: Что делают двойные скобки?
self.__items.append((module, item))
Это прохождение кортежа (module, item)
функции в качестве единственного аргумента. Без дополнительных парнеров он передавал бы module
и item
в качестве отдельных аргументов.
Внутренняя скобка создает tuple.
>>> 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')
А, я вижу, спасибо. :) – BrianFreud
Это точно так же, как говорят:
parameter = (module, item)
self.__items.append(parameter)
И.Э. внутренние параны сначала создают кортеж, прежде чем кортеж будет использоваться в качестве единственного аргумента для append()
.
за исключением того, что вам не нужны парсеры вокруг кортежа в вашем примере ... parameter = module, item просто отлично. – ch3ka
Все ответы, представленные до сих пор, должны оказаться полезными для ОП. Мне лично нравится это лучше всего, потому что он не отправляет тревогу педанта в отношении создания кортежа. Отлично сработано! –
@ Люди Джона, которые знали, что он создает кортеж, явно не пришли сюда с вопросом. –
@ Привет-Ангел: Я не думаю, что вы поняли мой комментарий. «Тревога педанта», о которой я говорил, это целые «кортежи создаются запятыми, а не скобками». Руководители тюльпанов любят привлекать внимание к этому вопросу и, кажется, делают это при каждой возможности. Конечно, это истинный момент; но для меня это слишком технический, особенно как объяснение новичка. Что мне нравится в этом ответе, так это то, что он сформулирован так, что * не подчеркивает этот момент. –