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 :

Paramétres de sorties


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut Paramétres de sorties
    Bonjour à tous,

    Je m'initie à Python et pour le moment je bloque sur un problème classique :
    Comment faire comprendre (syntaxiquement) au programme principal qui appelle une fonction, que certains paramétres de la fonction sont en sorties et donc n'ont pas à etre définis avant l'appel de la fonction ?

    Pour etre plus précis, voici le petit programme qui résout en boucle une équation du second degré.

    La fonction appellée s'apelle Resol2. Elle comporte les paramétres suivants :

    Entrées : a,b,c sont les trois coefficients (donc paramétres d'entrées).
    Sorties : x1,x2 sont les solutions de l'équations qui selon la valeur de code renvoyée par la fonction sont ou non significatifs.

    Lorsque je lance ce programme, l'interpréteur refuse de rentrer dans Resol2
    car il dit que x1 n'est pas définie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    a=input("a=")
     
    while (a!=0) :
     
        b=input("b=")
        c=input("c=")
     
        code=Resol2(a,b,c,x1,x2)
     
        print ("")
     
        if (code==2) :
     
            print("Deux solutions distinctes :")
            print "x1= ", x1
            print "x2 = ", x2
     
        elif (code==1) :
     
                print("Une solution unique :")
                print "x = ", x1
        else :
     
            print ("Pas de solution réelle.")
     
        a=input("a=")
     
    print("Fin Algo")
    Bien entendu le corps de Resol2 est défini juste avant ces quelque lignes.
    Comment faut-il 'déclarer' x1 et x2 ?

    Par avance merci

    jcmic

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    L'approche est mauvaise; le passage d'arguments se fait en Python par copie (copie de référence, mais copie tout de même). Il n'y a pas de paramètres "en sortie" comme on peut en trouver en Pascal par exemple.

    C'est inutile, du fait qu'une fonction peut parfaitement retourner plusieurs valeurs, sous forme d'un tuple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def Resol2(a,b,c):
        # calcul de x1 et x2
        return x1,x2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # code appelant:
    x1, x2 = Resol2(a,b,c)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut
    Ok, merci pour la réponse. C'est bon à présent.

    En fait Resol2 renvoie 3 valeurs : code,x1 et x2 et l'algo fonctionne bien ainsi.
    En effet le principe de la gestion des paramétres de retours est différentes par rapport au Pascal ou au C.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bienvenue sur le forum Python,



    J’estime que l’expression “paramètre de sortie“ est incorrecte.
    Un paramètre , c’est un symbole.
    Ce qu’une fonction renvoie, ce ne sont pas des symboles, ce sont des objets bien définis ayant des valeurs précises.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut

    http://fr.wikipedia.org/wiki/Paramètre

    [joke]
    je pourrais dire que "eyquem est un pinailleur" mais il me répondrait certainement que mon expression est incorrecte car eyquem, c'est un symbole
    [/joke]

  6. #6
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Je propose, à usage interne, l'expression "se faire eyquemer" devant signifier "se faire reprendre pour utilisation d'un langage non approprié".
    C'est plutôt un hommage qu'une moquerie car les interventions de notre cher eyquem sont la plupart du temps parfaitement justifiées.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Quitte a me faire eyquemer pour une énième fois il est a dire que la doc est trompeuse :

    Simple statement :
    If an expression list is present, it is evaluated, else None is substituted.

    return leaves the current function call with the expression list (or None) as return value.
    More Control Flow Tools:
    The return statement returns with a value from a function. return without an expression argument returns None. Falling off the end of a function also returns None.

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Qu'est-ce qui est trompeur là-dedans ? Tout au plus j'y vois un petit raccourci; pour être plus précis:

    return leaves the current function call with the result of the evaluation of the expression list (or None) as return value.

    Ce genre de mélange entre catégorie syntaxique (expression lists) et sémantique (values) est assez fréquent et ne prête généralement pas à confusion.
    A part ça je ne vois pas ce qu'il y a à reprocher à ces explications.

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Pour moi un paramètre c'est lors de l'exécution d'un script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python monscript.py param1 param2 param...

  10. #10
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Au sens le plus général un paramètre désigne une donnée passée en argument à un programme, une procédure une fonction.
    Encore faut-il distinguer les paramètres effectifs passés lors de l'appel, des paramètres formels effectivement représentés par des symboles (le plus souvent interchangeables) dans la description du traitement à effectuer. Le sens de paramètre est un peu différent dans le langage python de ce qu'il peut être dans des langages plus typés comme C.
    En python un paramètre peut a priori représenter n'importe quel objet python, cependant il doit y avoir compatibilité entre le type de l'argument passé en paramètre et le traitement demandé sur cet objet, faute de quoi on a une erreur d'exécution.
    Dans le cas d'un langage typé et compilé l'erreur est une erreur de compilation, elle intervient avant même l'exécution du programme. C'est pourquoi les langages à typage fort, s'ils sont plus contraignants réservent moins de mauvaises surprises.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  11. #11
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Citation Envoyé par dividee Voir le message
    Qu'est-ce qui est trompeur là-dedans ? Tout au plus j'y vois un petit raccourci; pour être plus précis:

    return leaves the current function call with the result of the evaluation of the expression list (or None) as return value..
    J'avais bien compris que return fait une évaluation des objets ou liste d'objet (d'où le tuple) a retourner.
    La ou je ne suis pas d'accord c'est que ce n'est pas une value mais un objet qui est obtenu. Dans le sens
    Citation Envoyé par eyquem Voir le message
    ce sont des objets bien définis ayant des valeurs précises.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> def test():
    ...     import sys
    ...     a=sys
    ...     return a
    ... 
    >>> result=test()
    >>> print type(result)
    <type 'module'>
    Citation Envoyé par dividee Voir le message
    Ce genre de mélange entre catégorie syntaxique (expression lists) et sémantique (values) est assez fréquent et ne prête généralement pas à confusion.
    Sauf dans une approche vierge de la programmation ou dans le cas de précédents dans un autre type de langage ou effectivement c'est une valeur qui est obtenue. Pour moi cela ne reflète pas le fonctionnement de Python tel que je le conçoit avec ma 'petite approche'. Toutefois je m'incline pour ce qui est du coté 'sémantique' par manque d'arguments plus expérimentés.
    Bon code

  12. #12
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    La ou je ne suis pas d'accord c'est que ce n'est pas une value mais un objet qui est obtenu.
    Je comprends le terme valeur comme un terme générique qui désigne le résultat de l'évaluation d'une expression. En Python, cela pourrait difficilement être autre chose qu'un objet.

    L'explication d'eyquem va plus loin en disant que ce sont des "objets bien définis ayant des valeurs précises" (on pourrait aussi parler d'objets dans un état défini). On peut voir un objet comme quelque chose qui évolue dans le temps, dont l'état change (sauf pour les objets immuables). Dans ce cadre-là, une valeur est un objet dans un état donné, un "cliché instantané" de l'objet, en quelque sorte.

  13. #13
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    on pourrait aussi parler d'objets dans un état défini
    Et les objets dans un état 'indéfini' ? Je ne vois pas ce que cela peut être, ni en python ni avec aucun autre langage.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  14. #14
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    Et les objets dans un état 'indéfini' ? Je ne vois pas ce que cela peut être, ni en python ni avec aucun autre langage.
    Je me suis fait eyquemer par Zavonen

    C'était juste pour insister sur le fait qu'il s'agissait de l'état de l'objet à un moment donné de l'exécution du programme.
    Usage impropre. Désolé.

  15. #15
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Je comprends le terme valeur comme un terme générique qui désigne le résultat de l'évaluation d'une expression. En Python, cela pourrait difficilement être autre chose qu'un objet.
    Mais ça c'est une réponse excellente et définitive !
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  16. #16
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par dividee Voir le message
    Je comprends le terme valeur comme un terme générique qui désigne le résultat de l'évaluation d'une expression. En Python, cela pourrait difficilement être autre chose qu'un objet.
    Puisque c'est bon pour l'objet je vais me contenter du générique value.

    Citation Envoyé par dividee Voir le message
    C'était juste pour insister sur le fait qu'il s'agissait de l'état de l'objet à un moment donné de l'exécution du programme.
    Pour en revenir au sujet c'est sans doute une précision complémentaire a apporter pour jcmic2.
    En effet nous ne parlons ici que 'd'exécution' et c'est en effet la première approche que nous avons sous idle ou un shell Python. Cela ne reflète pas la réalité du moteur deux temps de Python et est souvent source à erreur au début. Je ne parle pas du type comme signalé par Zavonen mais de la valeur de l'objet au moment de son appel, comme par exemple ici.

    Ps:
    Citation Envoyé par Zavonen Voir le message
    Et les objets dans un état 'indéfini' ?
    Tout dépend de l'heure mais moi devant mon clavier par exemple.

  17. #17
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par eyquem Voir le message
    J’estime que l’expression “paramètre de sortie“ est incorrecte.
    En Prolog, pourtant, c'est la dénomination couramment utilisée pour les... paramètres en sorties.

Discussions similaires

  1. Paramètre de sortie
    Par yAnSoLo82 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 19/01/2006, 14h51
  2. [Débutant]Procédure avec paramètres entrée / sortie
    Par jeromejanson dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2005, 08h30
  3. Affectation du résultat d'une ps sans paramètre de sortie
    Par PERRIN38 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/08/2005, 15h43
  4. @@identity en paramètre de sortie
    Par navis84 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/04/2005, 20h50
  5. Récupération des paramètres en sortie d'1 procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/12/2004, 11h40

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