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 :

Nom d'une variable


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Nom d'une variable
    Bonsoir,
    le code suivant permet dans certains cas de retrouver les noms possibles d'une variable.

    Le code plante dans le cas de oneVar . Avez-vous des idées pour améliorer cela ?

    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
    import gc
    import sys
     
    def name(obj):
        """
        Source : http://pythonic.pocoo.org/2009/5/30/finding-objects-names
        """
        frame = sys._getframe()
     
        for frame in iter(lambda: frame.f_back, None):
            frame.f_locals
     
        result = []
     
        for referrer in gc.get_referrers(obj):
            if isinstance(referrer, dict):
                for k, v in referrer.items():
                    if v is obj:
                        result.append(k)
        return result
     
    # Bon
    oneDict = {'2': None}
    print(name(oneDict))
     
    # Bon
    oneList = ['2', None]
    print(name(oneList))
     
    # Pas bon car inutilisable
    oneVar = 4
    print(name(oneVar))

  2. #2
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Le code "plante" c'est à dire?
    Win7-64 bits
    - Py27 - Ok
    - Py32 - Ok (avec plus de vars)

    mais je ne comprend pas vraiment de quoi il est question
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    J'ai rien dit
    je pense que le code est Ok.
    Vu que les entiers/chaines dans un certain ordre sont les meme(id), c'est normal qu'il ressorte tous les éléments pour une valeur int(str aussi je pense) donnée.
    vu qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a=4
    b = int(a)
    d = 2+2
    #est equivalent a:
    a=b=d=4
    alors je coche "validé"
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  4. #4
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Une question, en le faisant via les dicts globals()/locals() ca ne le ferait pas?
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour afranck64.

    Le script renvoie sur mon Mac :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ['oneDict']
    ['oneList']
    ['LC_NUMERIC', 'T_FMT_AMPM', 'LC_NUMERIC', 'T_FMT_AMPM', 'LC_NUMERIC',
    'T_FMT_AMPM', 'DEBUG_UNCOLLECTABLE', 'DEBUG_UNCOLLECTABLE', 'SIGILL',
    'SIGILL', 'oneVar', 'R_OK', 'O_NONBLOCK', 'O_NDELAY', 'EINTR', 'EINTR',
    'R_OK', 'O_NONBLOCK', 'O_NDELAY', 'R_OK', 'O_NONBLOCK', 'O_NDELAY',
    'ST_UID', 'UF_APPEND', 'S_IROTH', '_abc_negative_cache_version', 'NEWLINE',
    'LOCALE', 'L', 'SRE_INFO_CHARSET', 'SRE_FLAG_LOCALE',
    'SRE_INFO_CHARSET', 'SRE_FLAG_LOCALE', 'SRE_INFO_CHARSET',
    'SRE_FLAG_LOCALE', 'NEWLINE']
    La dernière liste n'est pas ce qui est attendu.

    Une question, en le faisant via les dicts globals()/locals() ca ne le ferait pas?
    Tu penses à quoi. Le script doit marcher y compris lorsqu'il est appelé depuis un autre fichier via un import.

  6. #6
    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 pense que le problème vient du fait que les types “simples“ de python, comme les nombres, sont immutables (cf. http://docs.python.org/py3k/referenc...type-hierarchy), et que donc toutes les variables valant 4 utilisent le même objet*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> a = 4
    >>> b = 8-4
    >>> a is b
    True
    >>> id(a)
    9296064
    >>> id(b)
    9296064
    Donc, rien à faire dans ces cas-là (les int, float, str, etc.), amha.

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

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 20h39
  2. [Tableaux] Concaténation du nom d'une variable
    Par nebule dans le forum Langage
    Réponses: 11
    Dernier message: 18/05/2006, 11h30
  3. Réponses: 37
    Dernier message: 02/03/2006, 01h58
  4. Incrémenter le NOM d'une variable
    Par Mors_Ubyte dans le forum Access
    Réponses: 1
    Dernier message: 03/01/2006, 18h47
  5. [Reflection] Connaître le nom d'une variable ...
    Par dahwoud dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/08/2005, 14h37

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