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 :

Intérêt de 1 << 1 au lieu de 2 (int) ?


Sujet :

Python

  1. #1
    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 Intérêt de 1 << 1 au lieu de 2 (int) ?
    Bonjour,

    Voici un bout de code qui me laisse perplexe, ou du moins qui me laisse l'impression de passer à coté de quelque chose:

    Source: Tix.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Some constants used by Tkinter dooneevent()
    TCL_DONT_WAIT     = 1 << 1
    TCL_WINDOW_EVENTS = 1 << 2
    TCL_FILE_EVENTS   = 1 << 3
    TCL_TIMER_EVENTS  = 1 << 4
    TCL_IDLE_EVENTS   = 1 << 5
    TCL_ALL_EVENTS    = 0
    Quel en est l’intérêt par rapport à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TCL_DONT_WAIT     = 2
    TCL_WINDOW_EVENTS = 4
    TCL_FILE_EVENTS   = 8
    ...
    ?

    @+

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour PauseKawa,

    Ça donne le même résultat, mais à mon avis, quand on veut positionner un bit à une place précise, la 1ère solution est un peu plus lisible:

    1<<3 ==> 00001000

    plutôt que:

    8 ==> 00001000

  3. #3
    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 tyrtamos,

    Je m'attendez bien à une réponse dans ce sens.
    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
    >>> import dis
    >>> def wint():
    ...     TCL_DONT_WAIT = 2
    ... 
    >>> dis.dis(wint)
      2           0 LOAD_CONST               1 (2)
                  3 STORE_FAST               0 (TCL_DONT_WAIT)
                  6 LOAD_CONST               0 (None)
                  9 RETURN_VALUE        
    >>> def woutint():
    ...     TCL_DONT_WAIT = 1 << 1
    ... 
    >>> dis.dis(woutint)
      2           0 LOAD_CONST               2 (2)
                  3 STORE_FAST               0 (TCL_DONT_WAIT)
                  6 LOAD_CONST               0 (None)
                  9 RETURN_VALUE
    Mais quel intérêt à partir du moment ou le code a été interprété (2) ?

    la 1ère solution est un peu plus lisible:

    1<<3 ==> 00001000

    plutôt que:

    8 ==> 00001000
    Pas pour moi... Un exemple ? Merci d'avance.

    @+

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Pour moi, la lisibilité un peu plus grande n'existe que pour le développeur qui écrit le script.

    Mais ça dépend peut-être des personnes? En tout cas, moi, j'utilise souvent cette présentation.

  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
    Mon avis c'est que c'est ceci que je n'arrive pas à cerner:
    Citation Envoyé par tyrtamos Voir le message
    mais à mon avis, quand on veut positionner un bit à une place précise, la 1ère solution est un peu plus lisible
    Citation Envoyé par tyrtamos Voir le message
    Pour moi, la lisibilité un peu plus grande n'existe que pour le développeur qui écrit le script.
    Je ne serais pas contre une explication plus détaillée car je ne comprend pas ( courge attitude du weekend) ceci:
    la 1ère solution est un peu plus lisible:

    1<<3 ==> 00001000

    plutôt que:

    8 ==> 00001000

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    J'ai un octet D qui contient 8 drapeaux (levé/baissé ou vrai/faux ou 1/0) appelés D0 à D7. Le drapeau D3 est positionné au 4ème bit en partant de la droite. Quand je lui donne une valeur, je comprend mieux:

    D3 = 1<<3

    que

    D3 = 8

    Les 2 donnant le même résultat: 00001000 = 8

    On peut ensuite combiner les drapeaux pour une application donnée:

    - avoir en même temps D3 et D4: D = D3 | D4
    - ajouter le drapeau D5 au D précédent: D = D | D5
    - mettre le bit correspondant à D4 à zéro: D = D & ~D4
    - etc...

    Ok?

  7. #7
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Je suis d’accord avec Tyrtamos. Il n’y a aucun intérêt du point de vue du programme lui-même, de ses fonctionnalités. Par contre, pour celui qui doit écrire un ensemble de bit flags (ou pire, étendre un ensemble défini par quelqu’un d’autre), c’est un plus indiscutable.

    Cette opération permet de matérialiser quel bit on utilise. Si pour les premiers, tout programmeur normalement constitué est capable de savoir que 4 correspond au troisième bit, je ne pense pas qu’il y en ait beaucoup qui soient capables de citer instantanément le bit correspondant à la valeur 2097152*? Dans ce cas, 1 << 21 est nettement plus parlant.

    Et on risque moins la faute de frappe*! Sinon, gare aux flags qui se répandent chez les copains.

  8. #8
    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 tyrtamos Voir le message
    Ok?
    Pour ce qui est du décalage binaire oui bien sur.

    En fait en relisant
    Citation Envoyé par mont29 Voir le message
    (ou pire, étendre un ensemble défini par quelqu’un d’autre)
    Je me dit que je suis passé à coté de
    # Some constants used by Tkinter dooneevent()
    Si dooneevent() utilise les opérateurs binaires (&, |, ^, ~, », «) il semble "évident/naturel" d'écrire 1<<3 plutôt que 8: Cela reste dans l'"esprit".

    Pour toute autre écriture je doute encore de l'utilité de la chose.

    Merci pour vos réponses

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Hello tout le monde,

    En effet aucun intérêt de montrer cette représentation comme le dis PauseKawa.

    Le seul intérêt que pourrait avoir l'auteur (mais je ne sais pas pourquoi), est peut-être de montrer la différence de décalage de bits entre chaque constante.

    Il est possible que se soit pour montrer une certaine logique de réflexion dans son code, ce qui permet de le rendre plus maintenable, si il y a un bug et qu'il pourrait être résolu par une tierce personne.

    Mais tout ça reste des suppositions

  10. #10
    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 PauseKawa Voir le message
    Si dooneevent() utilise les opérateurs binaires
    Tcl_DoOneEvent
    int flags (in)
    This parameter is normally zero. It may be an OR-ed combination of any of the following flag bits: TCL_WINDOW_EVENTS, TCL_FILE_EVENTS, TCL_TIMER_EVENTS, TCL_IDLE_EVENTS, TCL_ALL_EVENTS, or TCL_DONT_WAIT.
    Résolu et encore merci

  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,

    La déclaration de la valeur des flags acceptés par Tcl_DoOneEvent dans tix.py est un cut&paste de leurs valeurs dans le tcl.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define TCL_DONT_WAIT		(1<<1)
    #define TCL_WINDOW_EVENTS	(1<<2)
    #define TCL_FILE_EVENTS		(1<<3)
    #define TCL_TIMER_EVENTS	        (1<<4)
    #define TCL_IDLE_EVENTS		(1<<5)	/* WAS 0x10 ???? */
    #define TCL_ALL_EVENTS		(~TCL_DONT_WAIT)
    Comme ce cut&paste est fait "à la main" (et non par un outil qui automatiserait), si on ne veut pas se planter, le programmeur de Tix restera "proche" du C (et si le C avait été écrit autrement, la copie Python serait aussi différente).

    Dans tk.h on trouve aussi les champs de bits écrits ainsi:
    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
    #define TK_MAPPED		1
    #define TK_TOP_LEVEL		2
    #define TK_ALREADY_DEAD		4
    #define TK_NEED_CONFIG_NOTIFY	8
    #define TK_GRAB_FLAG		0x10
    #define TK_CHECKED_IC		0x20
    #define TK_DONT_DESTROY_WINDOW	0x40
    #define TK_WM_COLORMAP_WINDOW	0x80
    #define TK_EMBEDDED		0x100
    #define TK_CONTAINER		0x200
    #define TK_BOTH_HALVES		0x400
    #define TK_DEFER_MODAL		0x800
    #define TK_WRAPPER		0x1000
    #define TK_REPARENTED		0x2000
    #define TK_ANONYMOUS_WINDOW	0x4000
    #define TK_HAS_WRAPPER		0x8000
    #define TK_WIN_MANAGED		0x10000
    #define TK_TOP_HIERARCHY	0x20000
    #define TK_PROP_PROPCHANGE	0x40000
    #define TK_WM_MANAGEABLE	 0x80000
    1, 2, 4, 8 sont des valeurs décimales. Au délà, on passe dans la représentation hexa... pour être sur qu'on alloue un seul bit au flag.

    Le budget (en flags) est limité par le type char, short, int,... qui permettra de les stocker, échanger. A l'époque où nous devions faire attention à la capacité mémoire, on évitait d'allouer 32 bits, au cas où, à un champ qui n'avait pas de bonnes raisons de dépasser 8 bits.

    Mais si une nouvelle fonctionnalité demandait l'ajout d'un flag, savoir ou on en est côté allocation des bits est plus simple avec ces représentations (comparées à leurs valeurs décimales).

    Avoir des flags ne présuppose pas des opérations logiques qu'on fera dessus: en général, on ne peut pas mélanger n'importe quoi!

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

  12. #12
    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
    Re-...

    Citation Envoyé par wiztricks Voir le message
    La déclaration de la valeur des flags acceptés par Tcl_DoOneEvent dans tix.py est un cut&paste de leurs valeurs dans le tcl.h:
    Au delà du pourquoi de la mise en forme de ces "flags", je ne vois pas trop l'intérêt de leur définition dans tix.py: tk ne donne que des accès indirects à Tcl_DoOneEvent, je ne vois pas trop quand ils pourraient être utilisables.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    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 wiztricks,

    Citation Envoyé par wiztricks Voir le message
    Avoir des flags ne présuppose pas des opérations logiques qu'on fera dessus: en général, on ne peut pas mélanger n'importe quoi!
    C'est noté.

    Citation Envoyé par wiztricks Voir le message
    Au delà du pourquoi de la mise en forme de ces "flags", je ne vois pas trop l'intérêt de leur définition dans tix.py: tk ne donne que des accès indirects à Tcl_DoOneEvent, je ne vois pas trop quand ils pourraient être utilisables.
    La fin d'un mythe... Moi qui avez espoir de pouvoir y trouver un autre accès à l'event loop... Merci de m'éviter la lecture de plus de code.

    @+

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

Discussions similaires

  1. [TDataModule] Intérêt de séparer les accès aux données?
    Par Cornell dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/09/2003, 16h42
  2. [TOMCAT] affichage arborescence au lieu d'éxécuter la servle
    Par lombra dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 13/08/2003, 13h30
  3. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28
  4. [Concept] BD ou Gestion par fichier. Intérêt de la BD ?
    Par Cian dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/11/2002, 12h16
  5. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11

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