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ébutant] éviter les variables globales [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Par défaut [Débutant] éviter les variables globales
    Bonjour,

    J'ai fait une petite interface avec tkinter qui permet d'envoyer des commandes à ffmpeg afin de réencoder des fichiers.

    Ce programme marche, mais j'ai utiliser des variables globales partout, suite à une vielle habitude de la programmation sous qbasic.

    Je tente maintenant d'avoir une ré-écriture complète et plus "pythonesque", sauf que je bute sur la récupération du contenu des fonctions master et srt (les srt sont des fichiers sous titres).
    Je cherche à afficher leur valeur dans la fonction encodage.

    Voilà le code, en version allégé :

    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
    def master():
        master_file = askopenfilename()
        return master_file
     
    def srt():
     
        srt_file = askopenfilename(filetypes = [("srt","*.srt")])
        return srt_file
     
    def encodage(master_file, srt_file):
        print (master_file)
        print (srt_file)
     
    #------ Programme principal -------
     
    # Création du widget principal ("maître") :
    fenetre = Tk()
    fenetre.title('Incrustation') 
    fenetre.geometry("300x200")
     
    # création des boutons :
    bou1 = Button(fenetre,text='fichier master',command=master)
    bou2 = Button(fenetre,text='fichier srt',command=srt)
    bou3 = Button(fenetre,text='encoder',command=lambda:encodage(master_file,srt_file))
    bou4 = Button(fenetre,text='Quitter',command=fenetre.quit)
     
    bou1.grid(row =1, column =1, padx=100,pady=5)
    bou2.grid(row =2, column =1, padx=100,pady=5)
    bou3.grid(row =3, column =1, padx=100,pady=5)
    bou4.grid(row =4, column =1, padx=100,pady=5)
     
    fenetre.mainloop()              # démarrage du réceptionnaire d'événements
     
    fenetre.quit()               # destruction (fermeture) de la fenêtre
    J'ai utiliser "command=lambda:encodage(master_file,srt_file)" car après une recherche j'ai vu que "command" ne pouvais pas prendre de paramètre, mais même avec cela je ne vois pas comment envoyer les paramètres de master et srt dans encodage.

    Bien sur avec 2 variable globale, ça devrais aller.

    Sauriez-vous comment faire ? Merci à vous !

  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,

    Citation Envoyé par nephi28 Voir le message
    Ce programme marche, mais j'ai utiliser des variables globales partout, suite à une vielle habitude de la programmation sous qbasic.
    master, srt et encodage ne sont pas des fonctions mais des "callback".
    La grosse différence est que lorsqu'à un endroit de votre programme vous appelez une fonction, vous pouvez récupérer son retour. Un callback, c'est tkinter qui va l'appeler et qui récupérera son retour. Si vous voulez en récupérer quelque chose, il faut que ce quelque chose ait une durée de vie supérieur à l'appel de la fonction.
    Les variables globales ont cette propriété.

    Et lorsque vous aurez un peu trop de variables globales, la POO permettra de les "classer/ranger" dans différents objets: au lieu de modifier la variable globale d'un module, vous modifiez l'attribut de l'instance d'un objet crée "avant" l'appel de la fonction et qui restera accessible après son retour.
    Et comme cette fonction modifie l'état d'une instance, il sera plus cohérent d'en faire une méthode (les fonctions qui ont le "droit" d'accéder/modifier l'état d'un objet).

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

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Par défaut
    Merci.

    Donc finalement, j'ai refait le code mais en utilisant beaucoup moins de globale, et de ligne de code. Je passe en résolut.

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

Discussions similaires

  1. Les variables globales en C++
    Par jeje99 dans le forum C++
    Réponses: 4
    Dernier message: 03/02/2006, 15h52
  2. Réponses: 13
    Dernier message: 21/11/2005, 11h05
  3. Supprimer la mémoire utilisée par les variables globales
    Par dnaprotector dans le forum OpenGL
    Réponses: 4
    Dernier message: 21/07/2005, 13h18
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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