Почему в этом случае необходимо использовать звездочку? - PullRequest
0 голосов
/ 29 февраля 2020

Поскольку я хочу, чтобы на входе отображались только объекты, животные, виды спорта, почему добавление звездочки для создания * категорий способно фильтровать категории по объектам, животным, видам спорта и игнорировать любые другие слова после этого? Например, как в этом случае работает добавление звездочки?

import random

# Store the category and values into a dictionary
categories = {
    "objects": ["tables", "ladders", "chairs"],
    "animals": ["chicken", "dog", "cat"],
    "sports": ["basketball", "soccer", "rugby"]

}

response = input(' One among the following [%s] : \n' % ', '.join(map(str, list((*categories,)))))

1 Ответ

1 голос
/ 29 февраля 2020

Вот разбивка:

import snoop

categories = {
    "objects": ["tables", "ladders", "chairs"],
    "animals": ["chicken", "dog", "cat"],
    "sports": ["basketball", "soccer", "rugby"]

}

snoop.pp.deep(lambda: ', '.join(map(str, list((*categories,)))))

Вывод:

................... categories = {'objects': ['tables', 'ladders', 'chairs'], 'animals': ['chicken', 'dog', 'cat'], 'sports': ['basketball', 'soccer', 'rugby']}
........... (*categories,) = ('objects', 'animals', 'sports')
....... list((*categories,)) = ['objects', 'animals', 'sports']
... map(str, list((*categories,))) = <map object at 0x10d261520>
', '.join(map(str, list((*categories,)))) = 'objects, animals, sports'

Итерация по словарю дает его ключи, следовательно (*categories,) = ('objects', 'animals', 'sports').

Большая часть кода бессмысленно: ', '.join(categories) будет работать так же хорошо. Каждое из следующего независимо является избыточным и может быть пропущено:

  • map(str, ...)
  • list(...)
  • (*...,)
...