Передача массива / списка в Python - PullRequest
39 голосов
/ 18 октября 2010

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

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

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

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

def someFunc(*args, someString)

Поскольку это выдает ошибку.

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

Ответы [ 4 ]

54 голосов
/ 18 октября 2010

Когда вы определяете свою функцию, используя этот синтаксис:

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

Для которого требуется как минимум три аргумента и поддерживаются переменные номера других аргументов и аргументов ключевых слов.

22 голосов
/ 18 октября 2010

Вы можете передавать списки, как и другие типы:

l = [1,2,3]

def stuff(a):
   for x in a:
      print a


stuff(l)

Это печатает список l.Имейте в виду, что списки передаются как ссылки, а не как глубокая копия.

8 голосов
/ 18 октября 2010

Списки Python (которые не являются просто массивами, потому что их размер можно изменить на лету) являются обычными объектами Python и могут быть переданы в функции как любая переменная. Синтаксис * используется для распаковки списков, что, вероятно, сейчас вам не нужно.

6 голосов
/ 18 октября 2010

Вам не нужно использовать звездочку, чтобы принять список.

Просто дайте аргументу имя в определении и передайте список вроде

def takes_list(a_list):
    for item in a_list:
         print item
...