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 :

Probleme Python: recuperation de la valeur retournee par une fonction comme argument


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par défaut Probleme Python: recuperation de la valeur retournee par une fonction comme argument
    Bonjour a tous,

    Je fais mes premiers pas avec python et je me retrouve bloqué avec un truc apparemment simple dans d'autres environnements....mais qui me déroute avec python.

    Mon idée est la suivante: je fais tourner une fonction f(..) qui n'a pas besoin d'argument. Évidemment, ma fonction retourne une valeur donnée que je sais afficher.

    J'ai une autre fonction g(x) qui, pour s’exécuter , a besoin de la valeur renvoyée par f(). c'est a ce niveau que se situe mon probleme:

    je peux trivialement faire tourner f(), noter sa valeur de retour
    puis appeler ma fonction g( x) en lui passant la valeur notee qui n'est autre que mon argument. mais je voudrais faire plus elegant:

    A l’intérieur de ma fonction g(x), j'appelle ma fonction f(),qui fournit comme argument x sa valeur de retour...mais je n'y arrive pas . Voila mon code "abscon"

    Ma fonction f()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def f():
                   import random
                   p=random.random()
                   if p < 0.45   :            
                                 resultat = 1
                   else :
                                 resultat = 2      
                   return resultat

    ma fonction g(x)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def g(x):
                f()     // appel de la focntion f
                import random
                p=random.random()
     
                if p < 0.15:
                         if x == 1:
                                    resultat = 3
                         elif  x == 2:
                                    resultat = 4
                         return resultat
    C'est pour simplifier que je limite mon code a cette boucle...mais c’est plus complique que cela...de toute façon ce qui me bloque c'est la récupération
    de la valeur de retour de f pour servir d'argument a ma fonction.

    Si ce que je veux faire n'est pas stupide, merci de me fournir une indication.

    Joyeuses pâques!

  2. #2
    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

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,


  4. #4
    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
    Sans nommer la variable comment l'utilise tu dans g() ?
    g(x=f()) ou plutôt g(x=lambda: f())

  5. #5
    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
    Et puis même...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def g(f()):
      File "<stdin>", line 1
        def g(f()):
               ^
    SyntaxError: invalid syntax

  6. #6
    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
    Plus atypique mais a ne pas oublier suivant les besoins du code:
    @+

  7. #7
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par défaut Python: demander la valeur de la varaiable a l'utilisateur
    Bonjour,

    merci pour la promptitude de la réponse.......! J'avoue être dérouté par la simplicité de la solution...n’empêche que c'est stimulant d'apprendre. Aussi, Je relance avec une autre question:

    J'ai suivi vos indications et cela marche...mais j'ai un souci plus trivial que le premier :

    Pourquoi ce code ne fonctionne t il pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     def functBidule(x=input("Donnez moi la valeur de x : "))
         instructions

  8. #8
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par défaut
    Au vrai je veux permettre une interaction entre mon programme et l'utilisateur....et le code ci dessous ne marche pas comme je voudrais.

    car il s’exécute avant même de laisser le module de définition de la fonction....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    def functBidule(x=input("Donnez moi la valeur de x : "))
         instructions
         return

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

    En fait le code fonctionne (à condition de rajouter les deux points) et fait ce qu'il lui ai demander.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def functBidule(x=input("Donnez moi la valeur de x : ")):
    ...     print(x)
    ... 
    Donnez moi la valeur de x : 1
    >>>
    La fonction input est éxécutée des la lecture du code du fait des parentheses.
    Pourquoi ne pas rester simple ? Quel interet ici d'avoir un argument ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def functBidule():
    ...     x = input("Donnez moi la valeur de x : ")
    ...     print(x)
    ... 
    >>> functBidule()
    Donnez moi la valeur de x : 1
    1
    Si vous voulez vraiment la fonction input comme argument de funcBidule et que celle ci ne soit évaluée lors de la lecture du code vous pouvez utiliser une fonction lambda:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def functBidule(x=lambda: input("Donnez moi la valeur de x : ")):
    ...     v = x()
    ...     print(v)
    ... 
    >>> functBidule()
    Donnez moi la valeur de x : 1
    1
    Mais bon... Vu le code c'est inutile.

    @+

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Et puis même...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def g(f()):
      File "<stdin>", line 1
        def g(f()):
               ^
    SyntaxError: invalid syntax
    Ce n'est point ce que j'ai écrit.

    Mode d'emploi de mon code:
    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
     
    Python 2.6.5 (r265:79063, Oct  1 2012, 22:07:21) 
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def foo():
    ...     return 5
    ... 
    >>> foo()
    5
    >>> def baz(x):
    ...     return x * 2
    ... 
    >>> baz(foo())
    10
    >>>

  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
    Méa culpa VinsS : Je suis resté sur la question du po, soit utiliser le retour de f() dans g().

  12. #12
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par défaut
    Merci une fois de plus pour votre réponse. Bon l’intérêt de faire comme cela est tout simple: creer une interaction entre le programme et l'utilisateur afin que celui ci (pour ne pas connaître le code) comprenne par ce dialogue ce que fait le programme....

    dans le temps quand je programmais en Turbopascal, mes profs m'invitaient même a surcharger mon code de lignes du genre:

    "Donnez moi le rayon d'une sphère et je vous retourne sa surface et son volume: "

    etc...

    Juste un souci pédagogique!

    Et pour revenir a notre bout de code, tenant compte que je veux faire un calcul, je le modifierai peut être comme cela....:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     def functBidule(x=lambda: input("Donnez moi la valeur de x : ")):
    ...     v = float(x())
    ...


    merci encore.....a bientôt.

  13. #13
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 30
    Par défaut
    Bonjour,


    Juste une question avec le code de VinsS.
    Ce code ne fonctionne t il pas parceque le module python donne une portée globale a la fonction foo() , donc a la valeur qu'elle retourne? ....et c'est normal que la fonction baz(x) avec x=foo() retourne le résultat juste....

    mais si on exécute foo() d'abord , et qu'on quitte le module, en ouvrant une autre session de travail, pour exécuter la fonction baz(foo()) ....on aura droit a une erreur.

    Enfin il me semble

  14. #14
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben heu ... qu'appelles-tu une autre session de travail ?

    Je n'ai fait que donner un exemple simple d'usage d'une fonction en guise d'argument dans une autre fonction.

    Il va de soi que, dans l'exemple, l'appelant de baz() doit avoir accès à foo() mais ne doit pas être nécessairement dans le même espace de nom.

    Si foo() se trouve dans la classe Booz() par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    booz = Booz()
    ret = baz(booz.foo())

  15. #15
    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
    Citation Envoyé par integrale Voir le message
    Juste une question avec le code de VinsS.
    Ce code ne fonctionne t il pas
    Ce n'est pas le code de VinsS qui ne fonctionne pas mais mon code 'détourné' dans le sens de la question.
    L'erreur viens juste de ce qu'il est accepté comme argument pour une fonction : des références.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def foo(1):
      File "<stdin>", line 1
        def foo(1):
                ^
    SyntaxError: invalid syntax
    >>> def foo("a"):
      File "<stdin>", line 1
        def foo("a"):
                  ^
    SyntaxError: invalid syntax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def foo(a="a"):
    ...     pass
    ... 
    >>> def foo(a):
    ...     pass
    ... 
    >>>

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

Discussions similaires

  1. valeur retournee par une procedure stockee
    Par italiasky dans le forum Développement
    Réponses: 1
    Dernier message: 06/04/2010, 07h18
  2. [Débutant] Recuperer la valeur retourner par une fonction
    Par chouki dans le forum MATLAB
    Réponses: 1
    Dernier message: 26/05/2009, 09h04
  3. Réponses: 4
    Dernier message: 07/04/2007, 20h02
  4. [SQL] php et recuperation d'une valeur renvoyée par une fonction sql
    Par highman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/06/2006, 15h42
  5. comment recuperer une valeur retournée d'une fonction javascript?
    Par megapacman dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 13/06/2006, 14h53

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