Назначение оператора звезды при использовании в списке
Что оператор звезды делает для списка входных аргументов в этом примере?
def main(name, data_dir='.'):
print 'name', type(name)
if __name__ == '__main__':
main(*sys.argv)
Конкретно, если я запускаю программу с помощью оператора звезды, она печатает:
name <type 'str'>
если он запущен без звезды main(sys.argv)
, он печатает:
name <type 'list'>
Ответы
Ответ 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
.