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 :

déclaration de fonction etrange


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 115
    Points : 98
    Points
    98
    Par défaut déclaration de fonction etrange
    bonjour,

    je découvre python en convertissant un programme vers le C++.

    je suis tombé sur cette déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def capture(self, (param1, param2, param3), param):   ...
    quelqu'un pourrais me dire la différence avec une fonction ou tous les paramètres sont au même niveau dans la parenthèse ?
    Merci bcp

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par gargle Voir le message
    je découvre python en convertissant un programme vers le C++.

    je suis tombé sur cette déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def capture(self, (param1, param2, param3), param):   ...
    quelqu'un pourrais me dire la différence avec une fonction ou tous les paramètres sont au même niveau dans la parenthèse
    De telles constructions existent et sont licites dans une boucle for par exemple... mais pour ce qui est des paramètres de fonction, Python 3.5 n'en veut pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> def capture(self, (param1, param2, param3), param):
      File "<stdin>", line 1
        def capture(self, (param1, param2, param3), param):
                          ^
    SyntaxError: invalid syntax
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    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,

    Et Python 3.4 n'en veut pas non plus (SyntaxError)
    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

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Python 2 l'autorise (2.7.11)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def capture(self, (param1, param2, param3), param):
    	print(self, param1, param2, param3, param)
    La fonction propose alors les arguments suivants:
    capture(self, <tuple>, param)

    Il s'agit simplement d'unpacking d'un paramètre.

    L'unpacking c'est la possibilité de faire ça: (Python 2 & 3)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    table = [1, 2, 3]
    a, b, c = table
    assert a == 1 and b == 2 and c == 3
    Que l'on peut écrire avec parenthèses en tuple, ou crochets en liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (a, b, c) = table
    [a, b, c] = table
    Avec l'appel suivant: capture(1, (2, 3, 4), 5)

    La fonction va afficher: (1, 2, 3, 4, 5)

    Ce qui revient à faire :
    self, (param1, param2, param3), param = (1, (2, 3, 4), 5)

    On extrait chaque élément du tuple (2, 3, 4) pour le passer dans param1, 2 et 3.

    Chose qui est autorisée en Python 2 & 3 mais la version 3 n'autorise pas/plus l'unpacking passé en paramètre d'une déclaration de fonction.

    En Python 3 on peux utiliser la syntaxe splat (*) qui ferra la même chose et de manière beaucoup plus souple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def capture(self, param_lst, param):
    	print(self, *param_lst, param)
    Que l'on peut borner bien évidemment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def capture(self, param_lst, param):
    	print(self, *param_lst[:3], param)

    Avec l'appel suivant: capture(1, (2, 3, 4), 5)

    La fonction va afficher: 1 2 3 4 5

    NB: L'affichage est différent lié au fait du comportement des *args de la fonction print, il suffit de rajouter les arguments en tuple pour retrouver le même comportement.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par YCL-1 Voir le message
    Python 2 l'autorise (2.7.11)
    D'après le PEP 3113 qui annonce la suppression de son support, cette construction devrait sortir un warning dès la 2.6.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 115
    Points : 98
    Points
    98
    Par défaut
    merci beaucoup pour ces informations, je comprends mieux maintenant.

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

Discussions similaires

  1. Déclaration de fonction dans le "main".
    Par Pragmateek dans le forum C++
    Réponses: 14
    Dernier message: 23/06/2006, 19h32
  2. déclaration de fonctions externes
    Par poukill dans le forum C++
    Réponses: 40
    Dernier message: 17/05/2006, 16h15
  3. Réponses: 4
    Dernier message: 11/05/2006, 15h34
  4. Réponses: 6
    Dernier message: 20/11/2005, 02h53
  5. [JS] Problème déclaration de fonction
    Par glloq8 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/09/2005, 10h22

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