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

Tkinter Python Discussion :

Y a-t-il une bonne pratique d'importation des modules ?


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2019
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Nicaragua

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2019
    Messages : 56
    Points : 26
    Points
    26
    Par défaut Y a-t-il une bonne pratique d'importation des modules ?
    Bonjour

    Je suis débutant en Python.

    Je recherche donc souvent de la documentation pour comprendre certaines fonctions et avec le temps et les exemples, je suis confronté à de multiples manières d'importer des modules.
    Pour prendre l'exemple de TKinter, je trouve :

    Importation "as tk" :
    Mais après, il faut mettre "tk." devant toutes les fonctions de tkinter...

    Importation complète d'un seul coup (enfin, c'est ce que je comprends) :
    Importation de modules de tkinter, un par un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from tkinter import Button
    from tkinter import Entry
    from tkinter import StringVar
    Importation "as tk" avec importation de modules de tkinter, un par un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import tkinter as tk
    from tkinter import filedialog
    from tkinter import messagebox
    Importation des modules de tkinter, un par un, avec une gestion des erreurs (enfin, c'est ce que je comprends) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try:
        from tkinter import Button
        from tkinter import Entry
        from tkinter import StringVar
        from tkinter import Tk
        from tkinter.filedialog import askopenfilename
    except ImportError:
        from Tkinter import Button
        from Tkinter import Entry
        from Tkinter import StringVar
        from Tkinter import Tk
        from tkFileDialog import askopenfilename
    Pourquoi y a-t-il autant de manières d'importer un module ?
    Moi, je suis resté avec :
    Parce qu'elle est plus courte.

    Mais s'il y a autant de manières d'importer un module, c'est que certaines techniques présentent probablement des avantages, non ?
    Sont-elles plus, sécurisées ? Plus efficaces ? Moins gourmandes en ressources ?

    Laquelle me conseillez-vous ?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 333
    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 333
    Points : 36 853
    Points
    36 853
    Par défaut
    Salut,

    Citation Envoyé par Yobeco Voir le message
    Laquelle me conseillez-vous ?
    S'il y a des méthodes différentes, c'est qu'elles répondent à différents besoins non techniques (fonctionnellement çà va marcher "pareil")

    "from tkinter import *" est très bien lorsqu'on écrit un petit script dans lequel il n'y a pas beaucoup de variables globales.

    Mais "import tkinter" va aider à la lecture: tout ce qui commence par tkinter. n'est pas définit dans le module courant.

    "import tkinter as tk" se remplace facilement par "import Tkinter as tk" et aide à faire tourner un script d'une version 3 sur une version 2 sans forcément avoir a changer une ligne de plus.

    A chaque fois, il y a un contexte et des raisons qui vont motiver le choix d'une solution par rapport à une autre.
    Sachant que dire "j'ai pris l'habitude de faire comme çà alors..." est un non-choix (puisque vous faites l'économie de réfléchir au pourquoi).

    Il en de même des "bonnes pratiques": un règle qu'on applique... sans avoir à réfléchir par soi-même (parfois nécessaire pour que ce ne soit pas le foutoir lorsqu'on bosse à plusieurs et fermer des discussions sans fin pour arbitrer).


    - W

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2019
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Nicaragua

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2019
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Merci pour votre réponse

    Sachant que dire "j'ai pris l'habitude de faire comme çà alors..." est un non-choix (puisque vous faites l'économie de réfléchir au pourquoi).
    C'est exactement parce que je me sentais glisser de ce côté que je suis allé sur le forum... Je me suis rendu compte que je ne comprenais pas pourquoi utiliser telle syntaxe plutôt que telle autre...

    nécessaire pour que ce ne soit pas le foutoir lorsqu'on bosse à plusieurs et fermer des discussions sans fin pour arbitrer
    C'est ce que j'entendais par bon usage : "Règles arbitraires qui facilitent la vie de tous".

    Merci encore :-)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2019
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Nicaragua

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2019
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    J'ai encore un doute sur cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import tkinter as tk
    from tkinter import filedialog
    from tkinter import messagebox
    Dans ce cas : la ligne "import tkinter as tk" ne devrait-elle pas importer tout les modules de "tkinter" ?
    Pourquoi faut-il encore importer les modules filedialog et messagebox puisqu'ils sont dans "tkinter" ?

    Ne sont-ils pas chargés ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 333
    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 333
    Points : 36 853
    Points
    36 853
    Par défaut
    Salut,

    Citation Envoyé par Yobeco Voir le message
    Pourquoi faut-il encore importer les modules filedialog et messagebox puisqu'ils sont dans "tkinter" ?
    Vous devriez regarder ce que sont modules et packages sous Python.
    Et vous pourriez commencer à comprendre qu'il ne suffit pas de poser des scripts dans un répertoire pour qu'import fasse autre chose que ce qu'on l'a programmé pour...

    Ecrire une bibliothèque est un "projet" dont on va définir les livrables en fonction du contenu et de l'organisation de la construction.

    Il est clair que ceux qui ont fait ces choix ont eu leurs raisons de le faire. L'ignorance de certaines options n'est pas à exclure... et l'évolution des possibilités du langage depuis 25 ans font que si c'était à refaire, on pourrait faire autrement.

    Mais a un moment donné, il fallait faire des choix sinon on ne pouvait pas "construire" et "livrer"... Et maintenant, ben, l'histoire, le pourquoi s'est perdu (ou est peut être quelque part dans les archives d'Internet) mais n'a pas grande importance car çà fonctionne comme documenté et c'est "maintenable" par les développeurs qui ont pris la suite.

    - W

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2019
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Nicaragua

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2019
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Je vais étudier ça et je reviens :-)

    Merci !

  7. #7
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    En dehors de tkinter (perso, j'aime bien savoir de quel module provient une méthode ou fonction), il y a des fonctions communes à plusieurs modules, par exemple les fonctions exponentielles, trigonométriques, ... qui existent dans numpy ou math, peut-être même ailleurs.
    Ainsi, en faisant :
    On sait quel comportement aura la fonction exp.
    De plus, une telle utilisation permet de ne pas importer tout le module, donc d'économiser de la mémoire (même si ce n'est pas forcément important de nos jours).
    Ainsi, si j'ai besoin de pi du module math dans un programme et uniquement cela, je ne vais pas importer tout le module. Au pire je vais faire par exemple, pour quelques fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from math import pi, cos, sin
    Je ne suis pas forcément un exemple à suivre...

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 333
    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 333
    Points : 36 853
    Points
    36 853
    Par défaut
    Salut,

    Citation Envoyé par marco056 Voir le message
    De plus, une telle utilisation permet de ne pas importer tout le module, donc d'économiser de la mémoire (même si ce n'est pas forcément important de nos jours).
    from numpy import exp est juste l'équivalent de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import numpy
    exp = numpy.exp
    del numpy
    numpy est toujours importé, ce qui change, c'est les variables globales définies dans le module courant.

    Ce qui n'est pas inintéressant d'ailleurs car accéder à numpy.exp sera plus lent qu'accéder à exp puisque on évite la recherche de l'objet correspondant dans 2 dictionnaires.

    Et qui peut rendre intéressant la construction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import numpy
    def f():
         from numpy import exp
         ...
    - W

Discussions similaires

  1. [Swing] Utiliser du HTML: Une bonne pratique ?
    Par dranzul dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/07/2011, 09h42
  2. Conseil pour une bonne pratique (héritage)
    Par coberle dans le forum C++
    Réponses: 5
    Dernier message: 27/07/2010, 12h12
  3. Réponses: 4
    Dernier message: 02/02/2010, 23h49
  4. Réponses: 4
    Dernier message: 07/10/2008, 14h16
  5. [Python] Est-ce une bonne idée d'utiliser des modules pour stocker des objets ?
    Par Neolander dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 05/04/2008, 14h45

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