web-dev-qa-db-fra.com

Déclarer une fonction python avec un tableau de paramètres et passer un argument de tableau à l'appel de fonction?

Je suis un débutant complet pour python et j'essaie de passer un tableau comme argument à une fonction python qui déclare une liste/tableau comme paramètre).

Je suis sûr de le déclarer faux,

voici:

def dosomething(listparam):
         #do something here
dosomething(listargument)

De toute évidence, cela ne fonctionne pas, que fais-je de mal?

Merci

21
user1020069

Ce que vous avez est sur la bonne voie.

def dosomething( thelist ):
    for element in thelist:
        print element

dosomething( ['1','2','3'] )
alist = ['red','green','blue']
dosomething( alist )  

Produit la sortie:

1
2
3
red
green
blue

Quelques points à noter étant donné votre commentaire ci-dessus: contrairement aux langages de la famille C, vous n'avez souvent pas besoin de vous soucier du suivi de l'index lors de l'itération sur une liste, sauf si l'index lui-même est important. Si vous avez vraiment besoin de l'index, cependant, vous pouvez utiliser enumerate(list) pour obtenir des paires index,element, Plutôt que de faire la danse x in range(len(thelist)).

25
Russell Borogove

Peut-être que vous voulez décompresser les éléments du tableau, je ne sais pas si je l'ai, mais ci-dessous un exemple:

def my_func(*args):
    for a in args:
        print a

my_func(*[1,2,3,4])
my_list = ['a','b','c']
my_func(*my_list)
14
fabiocerqueira

Je suppose que je ne suis pas clair sur ce que l'OP demandait vraiment ... Voulez-vous passer l'ensemble du tableau/liste et opérer dessus à l'intérieur de la fonction? Ou voulez-vous que la même chose soit faite sur chaque valeur/élément dans le tableau/la liste. Si c'est ce que vous souhaitez, j'ai trouvé une méthode qui fonctionne bien.

Je connais mieux les langages de programmation tels que Fortran et C, dans lesquels vous pouvez définir des fonctions élémentaires qui opèrent sur chaque élément d'un tableau. J'ai finalement retrouvé l'équivalent python et j'ai pensé republier la solution ici. La clé est de 'vectoriser' la fonction. Voici un exemple:

def myfunc(a,b):
    if (a>b): return a
    else: return b
vecfunc = np.vectorize(myfunc)
result=vecfunc([[1,2,3],[5,6,9]],[7,4,5])
print(result)

Sortie:

[[7 4 5]
 [7 6 9]]
3
user4533269