web-dev-qa-db-fra.com

Passer un tableau / une liste dans Python

Je cherche à passer des tableaux, ou des listes, comme Python a tendance à les appeler, dans une fonction.

J'ai lu quelque chose sur l'utilisation de * args, tels que:

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

Mais je ne suis pas sûr que cela soit vrai ou faux. Rien ne semble fonctionner comme je veux. Je suis habitué à pouvoir passer des tableaux dans PHP fonctionne facilement et cela me laisse perplexe. Il semble également que je ne puisse pas le faire:

def someFunc(*args, someString)

Comme il jette une erreur.

Je pense que je viens de me perdre complètement et que je cherche quelqu'un pour que tout soit clair pour moi.

42
Jack Franklin

Lorsque vous définissez votre fonction en utilisant cette syntaxe:

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

Vous lui dites que vous attendez un nombre variable d'arguments. Si vous voulez passer dans une liste (tableau d'autres langues), vous feriez quelque chose comme ceci:

def someFunc(myList = [], *args)
    for x in myList:
        print x

Ensuite, vous pouvez l'appeler avec ceci:

items = [1,2,3,4,5]

someFunc(items)

Vous devez définir des arguments nommés avant des arguments variables et des arguments variables avant des arguments de mots clés. Vous pouvez aussi avoir ceci:

def someFunc(arg1, arg2, arg3, *args, **kwargs)
    for x in args
        print x

Ce qui nécessite au moins trois arguments et prend en charge des nombres variables d'autres arguments et des arguments de mots clés.

55
g.d.d.c

Vous pouvez passer des listes comme d'autres types:

l = [1,2,3]

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


stuff(l)

Ceci imprime la liste l. Gardez à l'esprit que les listes sont transmises en tant que références et non en copie intégrale.

24
JoshD

Les listes Python (qui ne sont pas simplement des tableaux car leur taille peut être changée à la volée) sont des objets normaux Python et peuvent être transmises aux fonctions en tant que variables. La syntaxe * est utilisée pour décompresser les listes , ce qui n’est probablement pas quelque chose que vous voulez faire maintenant.

8

Vous n'avez pas besoin d'utiliser l'astérisque pour accepter une liste.

Donnez simplement un nom à l'argument dans la définition, puis transmettez une liste comme

def takes_list(a_list):
    for item in a_list:
         print item
6
JAL