Подтвердить что ты не робот

Назначение оператора звезды при использовании в списке

Что оператор звезды делает для списка входных аргументов в этом примере?

def main(name, data_dir='.'):
    print 'name', type(name)

if __name__ == '__main__':
    main(*sys.argv)

Конкретно, если я запускаю программу с помощью оператора звезды, она печатает:

name <type 'str'>

если он запущен без звезды main(sys.argv), он печатает:

name <type 'list'>
4b9b3361

Ответ 1

Оператор * распаковывает список аргументов. Это позволяет вам вызывать функцию с элементами списка как отдельные аргументы.

Например, если sys.argv равно ["./foo", "bar", "quux"], main(*sys.argv) эквивалентно main("./foo", "bar", "quux").

Ответ 2

main(*sys.argv)

вызывает main с содержимым списка sys.argv в качестве соответствующих аргументов метода main и в этом случае эквивалентно:

main(sys.argv[0])

или

main(sys.argv[0], sys.argv[1])

в зависимости от длины sys.argv.

Итак, если вы вызываете его со звездочкой, он передает name первый элемент списка sys.argv.

Если вы вызываете его без звездочки, он переходит к name всему списку sys.argv.