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.
Best title ever.
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)
Y a des fois, je me dis: faut mieux aller se coucher
…. J y vais. Bonne nuit Sam
(So do I )
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)