web-dev-qa-db-fra.com

'id' est un mauvais nom de variable dans Python

Pourquoi est-il mauvais de nommer une variable id en Python?

117
brian buck

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.

120
Kevin Little

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
48

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).

44
DavidRR

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.

41
Sebastian Rittau

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é.

4
Toni Ruža

'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

1
brian buck

Parce que c'est le nom d'une fonction intégrée.

1
ahockley