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 :

Sortir une variable d'une fonction


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 7
    Par défaut Sortir une variable d'une fonction
    Bonjour je commence en programmationn , mais depuis quelques jours je suis face à un mur, en effet dans mon code ci-dessous je n'arrive pas à faire afficher "a" hors de ma fonction car par la suite j'aimerai l'utiliser en .get() pour l'injecter ailleur. Bonne fin de journée
    cdt

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    # coding:utf-8
     
    import tkinter as tk
    from tkinter import *
     
     
     
     
     
    def ut_dt(*args):
     
        if test.get() == 1:
     
         a = "blue"
         print(a)
        else:
        a="red"
        print(a)
     
    # comment faire pour utiliser a hors de la fonction de sorte à la transformer en a.get() .......
     
     
    mainapp = tk.Tk()
     
     
     
     
     
    test = tk.IntVar()
    test.trace("w", ut_dt)
     
     
     
    boutton_1 = tk.Radiobutton(mainapp, text="blue", value=1, variable=test)
    boutton_2 = tk.Radiobutton(mainapp, text="red", value=0, variable=test)
     
    boutton_1.pack()
    boutton_2.pack()
     
     
     
    mainapp.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Les variables (locales) d'une fonction disparaissent la fonction terminée.
    Vous pouvez éventuellement en faire des variables globales.

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

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Citation Envoyé par Cyprien85 Voir le message
    ... en effet dans mon code ci-dessous je n'arrive pas à faire afficher "a" hors de ma fonction car par la suite j'aimerai l'utiliser en .get() pour l'injecter ailleur
    Je ne suis pas sûr de comprendre ce que tu veux faire car la variable a est une string donc même si tu en fais une variable globale cela ne veut pas dire que tu pourras faire a.get()...

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 7
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Salut,

    Je ne suis pas sûr de comprendre ce que tu veux faire car la variable a est une string donc même si tu en fais une variable globale cela ne veut pas dire que tu pourras faire a.get()...
    Bonsoir, en faite l’idée c’est que «*a » m’affiche bleu ou rouge dans le terminale en hors de la fonction.... Mais je ne sais vraiment pas comment faire.... Si vous pouviez m’aider se serai fort sympathique.
    Bonne soirée
    Cdt

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ben tu peux en faire une variable globale en écrivant a = "red" en dehors de la fonction (juste avant par exemple).


    PS : j’initialise a à "red" car c'est le cas au début...

  6. #6
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonsoir,
    Tu peux utiliser un return dans ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def fonction():
        a = "bleu"
        return a
     
    var = fonction()
    print(var)

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Cyprien85 Voir le message
    Bonsoir, en faite l’idée c’est que «*a » m’affiche bleu ou rouge dans le terminale en hors de la fonction.... Mais je ne sais vraiment pas comment faire.... Si vous pouviez m’aider se serai fort sympathique.
    Vous programme est une application tkinter.
    Votre fonction n'est même pas une fonction, c'est juste un callback appelé parce que vous avez demandé de "tracer" les écritures sur la variable Tk "test".

    S'il ne se passe rien votre programme attend des évènements (à cause de l'appel à .mainloop).
    Et le seul évènement qui le fasse réagir est l'écriture dans la variable lorsque l'utilisateur sélectionne un Radiobutton.

    Tel que vous l'exprimez, ce que vous voulez n'a pas trop de sens.
    Vous avez un problème de compréhension (comment ce truc là fonctionne) qui ne peut se résoudre que par passer du temps à apprendre avec un tuto.

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

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Cyprien85 Voir le message
    Bonsoir, en faite l’idée c’est que «*a » m’affiche bleu ou rouge dans le terminale en hors de la fonction.... Mais je ne sais vraiment pas comment faire....
    Tu peux créer a en dehors de la fonction. Dans la fonction tu la références comme étant globale ce qui autorisera la fonction à la modifier. Et donc quand la fonction se termine, la variable possède la valeur que la fonction lui a donné
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    a=None
    def ut_dt(*args):
        global a
        if ...:
            a="Red"
        else:
            a="blue"
    # ud_dt()
     
    print(a)
    ud_dt()
    print(a)

    Toutefois utiliser des globales, c'est la pire de mauvaises idées. Déjà tu casses l'indépendance entre la fonction et son environnement (si demain la variable change il faut tout revoir) et dans 98% des cas ça dénote une erreur de conception.

    Tu peux par exemple faire en sorte que ta fonction renvoie ce qu'il faut et depuis l'extérieur, tu le récupères dans ce que tu veux (y compris dans "a" si besoin)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def ut_dt(*args):
        if ...:
            return "Red"
        else:
            return "Blue"
    # ud_dt()
     
    a=ud_dt(1, 2, 3)
    print(a)
     
    b=ud_dt(4, 5, 6)
    print(b)
    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]

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 7
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Bonsoir,
    Tu peux utiliser un return dans ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def fonction():
        a = "bleu"
        return a
     
    var = fonction()
    print(var)
    Oui mais le problème c’est que ça m’affiche que rouge or dans mon code au début de la conversation j’utilise un radioBoutton qui me permet de swicher entre soit a= bleu soit a=rouge....

  10. #10
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    @Cyprien85, je répondais au titre de la discussion . Je n'avais pas vraiment regardé ton code , désolé. Dans ton cas, la réponse de wiztricks est plus approprié...

    ps: Je regarderai plus tard ta problèmatique...

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    Toutefois utiliser des globales, c'est la pire de mauvaises idées. Déjà tu casses l'indépendance entre la fonction et son environnement (si demain la variable change il faut tout revoir) et dans 98% des cas ça dénote une erreur de conception.
    Certes mais ce n'est pas une fonction mais un callback tkinter. Elle n'est pas appelée depuis le programme mais par le gestionnaire d'évènement. Ce qu'elle retourne n'est pas accessible. Et la variable globale est la seule solution avant de maîtriser la POO (sauf à maîtriser tkinter et Python mais c'est encore plus compliqué!).

    Donc le PO n'a pas trop de choix... Et s'il ne comprends pas ce qu'on lui dit, il retourne à la case tuto.
    note: passer la variable en global rendra la variable accessible mais comme le code attend dans .mainloop, çà ne s'affichera pas tout seul!

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

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Certes mais ce n'est pas une fonction mais un callback tkinter. Elle n'est pas appelée depuis le programme mais par le gestionnaire d'évènement. Ce qu'elle retourne n'est pas accessible. Et la variable globale est la seule solution avant de maîtriser la POO (sauf à maîtriser tkinter et Python mais c'est encore plus compliqué!).

    Donc le PO n'a pas trop de choix... Et s'il ne comprends pas ce qu'on lui dit, il retourne à la case tuto.
    note: passer la variable en global rendra la variable accessible mais comme le code attend dans .mainloop, çà ne s'affichera pas tout seul!

    - W
    Si j’ai compris ce que vous avez dis.... mais dès lors que j’écoute le terminale m’affiche d’abord la première valeur «*NONE» puis la deuxième valeur (le bouton qui est coché au départ ) mais après dès lors que je coche le second il ne se passe rien .....

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Cyprien85 Voir le message
    Si j’ai compris ce que vous avez dis.... mais dès lors que j’écoute le terminale m’affiche d’abord la première valeur «*NONE» puis la deuxième valeur (le bouton qui est coché au départ ) mais après dès lors que je coche le second il ne se passe rien .....
    En faisant ce que je t'avais dit ça marche chez moi même si j’ai un doute sur l’intérêt...


    PS : Sinon est-ce utile d'avoir une variable globale a alors qu'on a la variable test qui est actualisée à chaque clique ?

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Cyprien85 Voir le message
    Si j’ai compris ce que vous avez dis.... mais dès lors que j’écoute le terminale m’affiche d’abord la première valeur «*NONE» puis la deuxième valeur (le bouton qui est coché au départ ) mais après dès lors que je coche le second il ne se passe rien .....
    Votre code fonctionne très bien: il affiche 'red', 'blue' lorsqu'on alterne la sélection.
    Et ce que vous racontez là n'a rien à voir avec la question initiale...

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

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Votre code fonctionne très bien: il affiche 'red', 'blue' lorsqu'on alterne la sélection.
    Et ce que vous racontez là n'a rien à voir avec la question initiale...

    - W
    Et bien je suis désolé mais je n’arrive pas visualiser voir le code et pourtant je me suis documenté sur le sujet à l’instant .....

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Cyprien85 Voir le message
    Et bien je suis désolé mais je n’arrive pas visualiser voir le code et pourtant je me suis documenté sur le sujet à l’instant .....
    Ma foi, c'est le code que vous avez posté... Et je ne suis pas le seul à vous avoir fait remarqué qu'il fonctionne.
    Après si en plus vous êtes bordélique, çà va pas être facile car programmer demande un peu (beaucoup) de rigueur et on ne peut pas plus vous aider.

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

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ma foi, c'est le code que vous avez posté... Et je ne suis pas le seul à vous avoir fait remarqué qu'il fonctionne.
    Après si en plus vous êtes bordélique, çà va pas être facile car programmer demande un peu (beaucoup) de rigueur et on ne peut pas plus vous aider.

    - W
    Je peux être été peu précis mais je n’arrive pas à visualiser les solutions que vous m’avez apporter. Et tout d’abord je ne vois par le rapport avec l’utilisation du mot bordélique.... Peut être que j’ai des lacunes en code, normale je débute, mais vous vous avez des lacunes en français mon pauvre gas

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Cyprien85 Voir le message
    Je peux être été peu précis mais je n’arrive pas à visualiser les solutions que vous m’avez apporter.
    Je parle juste du code que vous avez posté initialement: vous n'en avez pas posté d'autre et il fonctionne.

    Après, si vous ne prenez pas le temps d'ouvrir un tuto. et apprendre les bases,, ce n'est pas en survolant une documentation que vous allez vous en sortir car c'est un peu "technique".
    C'est une des raisons pour lesquelles, on vous demande de savoir un peu programmer avant de poster.

    Citation Envoyé par Cyprien85 Voir le message
    Peut être que j’ai des lacunes en code, normale je débute, mais vous vous avez des lacunes en français mon pauvre gas
    Fils d'immigrant, ce n'est pas ma langue maternelle. Ce n'est pas une excuse et je me soigne.

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

  19. #19
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Cyprien85 Voir le message
    Je peux être été peu précis mais je n’arrive pas à visualiser les solutions que vous m’avez apporter.
    Quelle solution as-tu testé ?

    Encore une fois en faisant ce que je t'avais dit* ça marche chez moi même si j’ai un doute sur l’intérêt...

    * Voici le 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    # coding:utf-8
     
    import tkinter as tk
    from tkinter import *
     
    a = "red"
     
    def ut_dt(*args):
        global a   
     
        if test.get() == 1:
            a = "blue"
            print(a)
        else:
            a = "red"
            print(a)
     
    # comment faire pour utiliser a hors de la fonction de sorte à la transformer en a.get() .......
    print(a)
     
    mainapp = tk.Tk()
     
    test = tk.IntVar()
    test.trace("w", ut_dt)
     
    boutton_1 = tk.Radiobutton(mainapp, text="blue", value=1, variable=test)
    boutton_2 = tk.Radiobutton(mainapp, text="red", value=0, variable=test)
     
    boutton_1.pack()
    boutton_2.pack()
     
    mainapp.mainloop()
    Je ne vois pas l’intérêt de faire de a une variable globale mais le code fonctionne...

    Ou du moins il fonctionne si on corrige l'erreur d'indentation qu'il y a dans le code que tu as posté...

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 7
    Par défaut
    Non c’est bon j’ai trouvé mon erreur le code marche, c’est juste que je n’avais pas mis a = red hors de la boucle....
    bonne soirée
    Cdt

Discussions similaires

  1. Portée d'une variable ou sortir d'une fonction
    Par spinoops dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 17/07/2014, 17h08
  2. Sortir une fonction d'une boucle for
    Par Nitromard dans le forum MATLAB
    Réponses: 4
    Dernier message: 19/07/2011, 09h30
  3. [Débutant] Sortir des variables d'une fonction executée dans un callback
    Par jasdu95 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 22/11/2010, 15h44
  4. Sortir une variable d'une fonction JS.
    Par xplose dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/08/2007, 09h10
  5. [Threads] Sortir d'une fonction bloquante
    Par guejo dans le forum MFC
    Réponses: 19
    Dernier message: 17/08/2004, 14h12

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