Pourquoi est-il mauvais de nommer une variable id
en Python?
id()
est un élément fondamental intégré:
Aide sur la fonction intégrée
id
dans le module__builtin__
:id(...) id(object) -> integer Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (Hint: it's the object's memory address.)
En général, l'utilisation de noms de variables qui éclipsent un mot-clé ou une fonction intégrée dans n'importe quelle langue est une mauvaise idée, même si elle est autorisée.
id
est une fonction intégrée qui donne l'adresse mémoire d'un objet. Si vous nommez une de vos fonctions id
, vous devrez dire __builtins__.id
pour obtenir l'original. Renommer id
globalement est source de confusion dans tout sauf un petit script.
Cependant, la réutilisation des noms intégrés en tant que variables n'est pas si mauvaise tant que l'utilisation est locale. Python a un lot de fonctions intégrées qui (1) ont des noms communs et (2) vous n'utiliserez pas beaucoup de toute façon. En les utilisant comme variables locales ou comme les membres d'un objet sont OK car il est évident du contexte ce que vous faites:
Exemple:
def numbered(filename):
file = open(filename)
for i,input in enumerate(file):
print "%s:\t%s" % (i,input)
file.close()
Quelques éléments intégrés avec des noms tentants:
id
file
list
map
all
, any
complex
dir
input
slice
buffer
Dans PEP 8 - Guide de style pour Python , les conseils suivants apparaissent dans la section Descriptif: Styles de dénomination :
single_trailing_underscore_
: Utilisé par convention pour éviter les conflits avec Python, par ex.
Tkinter.Toplevel(master, class_='ClassName')
Donc, pour répondre à la question, un exemple qui applique cette directive est:
id_ = 42
L'intégration du trait de soulignement de fin dans le nom de la variable rend l'intention claire (pour ceux qui connaissent les directives de PEP 8).
Je pourrais dire quelque chose d'impopulaire ici: id()
est une fonction intégrée plutôt spécialisée qui est rarement utilisée dans la logique métier. Par conséquent, je ne vois aucun problème à l'utiliser comme nom de variable dans une fonction stricte et bien écrite, où il est clair que id ne signifie pas la fonction intégrée.
Il est mauvais de nommer une variable après une fonction intégrée. L'une des raisons est que cela peut être déroutant pour un lecteur qui ne sait pas que le nom est remplacé.
'id' est une méthode intégrée en Python. L'attribution d'une valeur à 'id' écrasera la méthode. Il est préférable d'utiliser un identifiant avant comme dans "some_id" ou de l'utiliser dans une méthode de capitalisation différente.
La méthode intégrée prend un seul paramètre et retourne un entier pour l'adresse mémoire de l'objet que vous avez transmis.
>>>
id (1)
9787760
>>>
x = 1
>>>
id (x)
9787760
Parce que c'est le nom d'une fonction intégrée.