Передача массива/списка в Python
Я рассматривал передачу массивов или списков, как это обычно называют Python, в функцию.
Я прочитал что-то об использовании * args, например:
def someFunc(*args)
for x in args
print x
Но не уверен, что это правильно/неправильно. Кажется, что ничего не работает. Я привык к тому, чтобы с легкостью передавать массивы в функцию PHP, и это меня пугает. Кажется, я не могу этого сделать:
def someFunc(*args, someString)
По мере возникновения ошибки.
Я думаю, что я просто полностью смутился и искал, чтобы кто-то очистил его для меня.
Ответы
Ответ 1
Когда вы определяете свою функцию с помощью этого синтаксиса:
def someFunc(*args)
for x in args
print x
Вы говорите, что ожидаете переменное количество аргументов. Если вы хотите перейти в список (массив с других языков), вы бы сделали что-то вроде этого:
def someFunc(myList = [], *args)
for x in myList:
print x
Затем вы можете вызвать его следующим образом:
items = [1,2,3,4,5]
someFunc(items)
Вам нужно определить именованные аргументы перед аргументами переменных и переменные аргументы перед аргументами ключевого слова. Вы также можете получить следующее:
def someFunc(arg1, arg2, arg3, *args, **kwargs)
for x in args
print x
Для этого требуется не менее трех аргументов и поддерживает переменные числа других аргументов и аргументы ключевых слов.
Ответ 2
Вы можете передавать списки так же, как и другие типы:
l = [1,2,3]
def stuff(a):
for x in a:
print a
stuff(l)
Распечатывает список l. Помните, что списки передаются как ссылки не как глубокая копия.
Ответ 3
Списки Python (которые не просто массивы, потому что их размер может быть изменен "на лету" ) являются обычными объектами Python и могут передаваться в функции как любая переменная. Синтаксис * используется для распаковки списков, что, вероятно, не является тем, что вы хотите сделать сейчас.
Ответ 4
Вам не нужно использовать звездочку, чтобы принять список.
Просто укажите аргумент имени в определении и перейдите в список, например
def takes_list(a_list):
for item in a_list:
print item