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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 736
    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 736
    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
    920
    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 : 920
    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
    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....

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    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

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    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]

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    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

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

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