IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Transformer une liste en arguments


Sujet :

Python

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut Transformer une liste en arguments
    Bonjour à tous les passionnés de ce superbe langage.

    Mon souci aujourd'hui est le suivant: je dois appeler une fonction "toto()" pouvant recevoir plusieurs arguments. Cette fonction n'est pas de moi, je ne peux pas la modifier.

    Donc on peut l'appeler avec 3 arguments style toto(1, 2, 3) ou 2 arguments style toto(1, 2) ou etc.

    De mon coté, je dispose des arguments dans une liste. Style a=(1, 2, 3). Et j'aimerais bien passer les éléments de cette liste à ma fonction. Mais là, si j'appelle toto(a) ça me répond que toto est prévu pour recevoir divers arguments mais pas un tuple.

    Donc ma solution actuellement est la suivante
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if len(a) == 1:
        toto(a[0])
    elif len(a) == 2:
        toto(a[0], a[1])
    elif len(a) == 3:
        toto(a[0], a[1], a[2])
    etc

    Et donc ben je ne trouve pas ça super extraordinaire. Si qqun avait une solution plus élégante...

    Merci à tous de votre présence.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    ?
    Superbe !!! Comme d'habitude.

    Toutefois là, ne connaissant pas cette syntaxe, je reste un peu paumé. J'ai tenté de faire "print *a" mais j'ai une erreur de syntaxe.
    A quoi correspond "*a" par rapport à "a" ??? Est-ce que cela a un rapport avec *args et **kwargs qu'on utilise quand on veut créer des fonctions avec nombre variable de paramètres ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    En version 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> a = (1, 2, 3)
    >>> print(*a)
    1 2 3
    Peut-être un problème de version je sais pas

    Est-ce que cela a un rapport avec *args et **kwargs qu'on utilise quand on veut créer des fonctions avec nombre variable de paramètres ???
    Oui

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> def test(*args):
    	print('\n'.join([str(i) for i in args]))
     
     
    >>> test(1,2,3)
    1
    2
    3
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En Python 2.7:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def toto(*a):
        print a
        for i in range(len(a)):
            print a[i]
     
    toto('x', 'y', 'z', 't')
    ('x', 'y', 'z', 't')
    x
    y
    z
    t
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    En Python 2.7:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def toto(*a):
        print a
        for i in range(len(a)):
            print a[i]
     
    toto('x', 'y', 'z', 't')
    ('x', 'y', 'z', 't')
    x
    y
    z
    t
    Salut
    Oui, je connaissais cet outil (et aussi l'autre à base de ** qui est un dictionnaire) comme paramètre
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> def toto(**a):
    	print a
    	for (k, v) in a.items():
    		print k, v
     
    >>> 
    >>> 
    >>> 
    >>> toto(i=5, j=6, k=7)
    {'i': 5, 'k': 7, 'j': 6}
    i 5
    k 7
    j 6

    Mais je ne savais pas que je pouvais aussi m'en servir comme conversion de tableau en paramètre.

    Remarque, une fois qu'on le sait, ça devient évident. *a placés comme paramètres dans une fonction transforme des arguments en tableau ; *a passé à une fonction transforme alors un tableau en arguments...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Tant qu’on y est, on peut aussi utiliser **dict pour “expanser” un dico en paramètres nommés d’une fonction*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> def toto(a, b, c):
    ...     print(a, b, c)
    ...
    >>> param = {"a": 1, "b": 'foo', "c": 3.1415}
    >>> toto(**param)
    1 foo 3.1415
    Et le fait que print(*a) fonctionne s’explique par le fait que print est une fonction “comme les autres” en py3, prenant un nombre indéterminé de paramètres positionnels (alors que le print *a de py2 fait appel à un mot clé, et là ça marche pas). Pour preuve, ni print **dict ni print(**dict) ne fonctionnent…

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant] transformer une List en array
    Par pingoui dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/01/2009, 10h48
  2. Transformer une liste de caractères en nombre
    Par divpload dans le forum Général Python
    Réponses: 2
    Dernier message: 18/05/2008, 19h31
  3. Réponses: 21
    Dernier message: 21/03/2007, 05h18
  4. Transformer une liste en tableau
    Par basket dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/09/2006, 16h01
  5. Transformer une liste en chaîne de caractères
    Par nounjours dans le forum Prolog
    Réponses: 1
    Dernier message: 23/02/2006, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo