Attend, pourquoi il me colore vars lui ?


Je connais tout en Python. On peut rien m’apprendre. Je suis un Dieu.

Mais pourquoi mon éditeur de texte me colore le nom de variable vars comme si c’était une fonction ? Je n’ai pas défini de…

Attend…

Nan…

Putain c’est un built-in !

Il y a encore des fonctions built-in que je ne connais pas non de nom !

>>> class UneClasse(object):
...     def __init__(self):
...         self.attribut = 'valeur'
...     def methode(self):
...         pass
...     
>>> vars(UneClasse()) # wut ?
{'attribut': u'valeur'}

En fait c’est l’équivalent de faire obj.__dict__, mais en propre. Tout comme next(iterable) est la version propre de iterable.__next__().

D’ailleurs on travaille sur une copie :

>>> id(object.__dict__)
33943288
>>> id(vars(object))
33942840

A chaque fois que je commence à me sentir enfin un programmeur de la mort, y a un détail pour me rappeler qu’il me reste toujours des bases à apprendre.

4 thoughts on “Attend, pourquoi il me colore vars lui ?

  • ZZelle

    Perso, les collisions courantes sont:
    – Number 4 … Comment nommer un type d’objet ? type ? mince, je suis tombé sur un built-in, type_ c’est tellement plus class
    – Number 3 … Comment nommer un mapping d’objet ? map ? mince, je suis re-tombé sur un built-in
    – Number 2 … l’internationalisation, ça sert à rien ? … bah on va utiliser _ vu que c’est le nom de la variable poubelle de notre coding-style !
    – Number 1 … Comment nommer un identifiant ? id ? mince, je suis re-re-tombé sur un built-in … (utilisé par le package routes)

  • yvesd

    Y a des fois, je me dis: faut mieux aller se coucher
    …. J y vais. Bonne nuit Sam
    (So do I )

  • Josh

    Ca pour le coup je connaissais, et je l’utilise pas mal pour des fichiers de paramètres pour des simulations.
    Typiquement je fais:


    # -*- coding: utf-8 -*-
    # fichier paras.py

    # Paramètres initiaux
    nombre_de_pieds = 1000
    _nombre_de_mains = 2 # Je ne veux pas récupérer celui-là

    # Trucs à faire avec les paramètres
    nombre_humains_complets = min(nombre_de_pieds, _nombre_de_mains)/2

    paras = {k:v for k,v in vars().items() if k[0]!='_'}

    Comme ça je ne récupère que les variables qui m’intéressent avec:

    from para import paras

    do_simu(paras)

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.