Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

retrouver le nom d'une variable (et non pas son contenu)

–1 vote
    >>>my_string = "\nEssayez de retrouver le nom de cette chaine"
    >>>print(my_string)

    Essayez de retrouver le nom de cette chaine
    >>>print("voici la reponse  :   ",my_string.name)
    AttributeError: 'str' object has no attribute 'name'
    >>>print(dir(my_string))
    ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

>>> print(my_string.__str__)
<method-wrapper '__str__' of str object at 0x7f160752b928>
>>> print(my_string.title)
<built-in method title of str object at 0x7f160752b928>

Comment récupérer le nom de la chaîne ? Si y a pas de méthode magique ou autre pour faire cela, je suggère que ça soit intégré dans les prochaines versions de python, parce que plusieurs fois cela m'aurait bien servi dans le passé.
Cela peut etre utile quand on boucle sur une liste de valeur, et qu on veuille afficher le nom et son contenu, sans passer par un dico par exemple.

demandé 3-Aou par buffalo974 (2,690 points)

Vu le fonctionnement de python sur la gestion des noms/variables/valeurs, j'ai bien peur que ton souhait ne soit jamais réalisé...

Le problème le plus évident : et si 2 variables (ou noms si on préfère) désignent le même objet, quel serait le nom associé à cet objet ?
En fait on peut en avoir bien plus de 2 et même 0.

Y a pas une astuce en rapport avec les adresses memoires ?
Comment l' interpreteur se debrouille quand je l interroge sur my_string ? Avec un peu de magie noire, ca doit etre faisable ?

1 Réponse

+1 vote
 
Meilleure réponse

Est-ce que quelque chose comme ça irait ?

import inspect


def retrieve_name(var):
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    return [name for name, value in callers_local_vars if value is var]


my_string = "\nEssayez de retrouver le nom de cette chaine"
print(retrieve_name(my_string))

J'ai honteusement copié cette réponse, il y a plus d'infos si ça t'intéresse :)

répondu 4-Aou par Tiger-222 (780 points)
sélectionné 5-Aou par buffalo974

impec !
j'ai modifié pour virer les crochets et simple quote:

def retrieve_name(var):
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    bidul = str([name for name, value in callers_local_vars if value is var])

    bidul = bidul[2:-2]
    return bidul

et j ' utilise ainsi:

jours = [seize,dixsept,dixneuf,vingt]
for n in range(len(jours)):


    print(".   .   .  ",retrieve_name(jours[n])," juillet 2018   ")
    print(jours[n])

les variables journalieres pouvant correspondre a ce que vous voulez,ça peux servir.

...