Функция Python ожидает кортеж, у меня есть список. Как мне вызвать эту функцию? - PullRequest
2 голосов
/ 26 февраля 2012

Функция record() в модуле pyshp ожидает последовательность в качестве ввода:

outfile.record('First','Second','Third')

Что у меня есть список:

row = ['First','Second','Third']

КогдаЯ вызываю функцию record() следующим образом:

outfile.record(row)

Я получаю ошибку tuple index out of range.Оказывается, функция получает

(['First','Second','Third'],)

Как правильно вызвать record?Я пробовал

outfile.record((row[i] for i in range(len(row)))

, но это тоже не работает.

Ответы [ 2 ]

11 голосов
/ 26 февраля 2012
outfile.record(*row)

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

Обратите внимание, что есть аналогичная конструкция, которая распаковываетотображение (dict) в аргументы ключевых слов:

functiontakingkeywordarguments(**mydict)
7 голосов
/ 26 февраля 2012
outfile.record(*row)

* в этом случае означает «распаковать».Распакует список в серию аргументов.

http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists

...