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

Передача массива/списка в Python

Я рассматривал передачу массивов или списков, как это обычно называют Python, в функцию.

Я прочитал что-то об использовании * args, например:

def someFunc(*args)
    for x in args
        print x

Но не уверен, что это правильно/неправильно. Кажется, что ничего не работает. Я привык к тому, чтобы с легкостью передавать массивы в функцию PHP, и это меня пугает. Кажется, я не могу этого сделать:

def someFunc(*args, someString)

По мере возникновения ошибки.

Я думаю, что я просто полностью смутился и искал, чтобы кто-то очистил его для меня.

4b9b3361

Ответ 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