Добавление другой функции в sum () в качестве начального параметра - PullRequest
0 голосов
/ 28 мая 2020

Я видел приведенную ниже функцию в учебнике по упаковке.

Я сомневаюсь в sum(), который принимает Counter() как параметр start . Что произойдет в этом случае?

# Import needed functionality
from collections import Counter

def sum_counters(counters):
  # Sum the inputted counters
  return sum(counters, Counter())

Я пробовал реплицировать, используя приведенный ниже код

a=[2,3,3,4,5,5,6]
sum(a,len())

Результат:

TypeError: len() takes exactly one argument (0 given)

Я не могу его воспроизвести с Counter() (из-за ошибки в pip при загрузке пакета коллекций), и я не могу найти какую-либо документацию, в которой упоминается о предоставлении функций в качестве параметров start .

Может ли кто-нибудь пролить свет на это. Спасибо

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Я сомневаюсь в том, что sum () принимает Counter () в качестве начального параметра. Что произойдет в этом случае?

Как и в любом другом случае, он берет начальный Counter() и добавляет к нему первый элемент counters, а затем добавляет к нему следующий. результат и так далее. Это то же самое, как если бы вы явно использовали символ + между всеми экземплярами Counter. Чтобы понять, что делает , что , см. Документацию .

TypeError: len () принимает ровно один аргумент (задано 0)

Ну да, вроде написано; len необходимо знать, что получить длину из . Я не понимаю, что вы хотите от этого sum вызова do .

, и я не могу найти какую-либо документацию, в которой упоминается о предоставлении функций в качестве параметров запуска.

collections.Counter не функция; это класс . Однако len(x) тоже не функция; это результат вызова этой функции . (Точно так же результатом вызова класса collections.Counter будет collections.Counter экземпляр .) В любом случае, не имеет значения, откуда берется параметр start; важно то, какое у него значение . Например:

a=[2,3,3,4,5,5,6]
sum(a,len(a))

a содержит 7 элементов, поэтому len(a) равно 7, и результат такой же, как при непосредственном написании sum(a, 7). То есть 7 + 2 + 3 + 3 + 4 + 5 + 5 + 6 = 35.

2 голосов
/ 28 мая 2020

Counter() предоставляет пустой экземпляр Counter; len не может быть вызван без аргументов.

sum(counters, Counter()) примерно эквивалентно

result = Counter()
for x in counters:
    result = result + x

Вы можете сделать это, потому что сложение определено для экземпляра Counter.

В примере, который вы пытаетесь, вы хотите, чтобы в качестве начального значения была длина пустого списка:

sum(a, len([]))

Поскольку len([]) == 0, это то же самое, что sum(a, 0) или просто sum(a) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...