Perché è male nominare una variabile id
in Python?
id()
è un built-in fondamentale:
Aiuto sulla funzione integrata
id
nel modulo__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.)
In generale, utilizzare nomi di variabili che Eclipse una parola chiave o una funzione integrata in qualsiasi lingua è una cattiva idea, anche se è consentita.
id
è una funzione integrata che fornisce l'indirizzo di memoria di un oggetto. Se assegni una delle tue funzioni id
, dovrai dire __builtins__.id
per ottenere l'originale. Rinominare id
a livello globale è fonte di confusione in tutto tranne che in un piccolo script.
Tuttavia, riutilizzare i nomi predefiniti come variabili non è poi così male purché l'uso sia locale. Python ha un lotto di funzioni integrate che (1) hanno nomi comuni e (2) non userai molto comunque. Usandole come variabili locali o come i membri di un oggetto vanno bene perché è ovvio dal contesto cosa stai facendo:
Esempio:
def numbered(filename):
file = open(filename)
for i,input in enumerate(file):
print "%s:\t%s" % (i,input)
file.close()
Alcuni built-in con nomi allettanti:
id
file
list
map
all
, any
complex
dir
input
slice
buffer
In PEP 8 - Guida allo stile per Python , la seguente guida appare nella sezione Descrittivo: Stili di denominazione :
single_trailing_underscore_
: Utilizzato dalla convenzione per evitare conflitti con Python, ad es.
Tkinter.Toplevel(master, class_='ClassName')
Quindi, per rispondere alla domanda, un esempio che applica questa linea guida è:
id_ = 42
Includere il carattere di sottolineatura finale nel nome della variabile chiarisce l'intento (per coloro che hanno familiarità con la guida in PEP 8).
Potrei dire qualcosa di impopolare qui: id()
è una funzione incorporata piuttosto specializzata che viene raramente utilizzata nella logica aziendale. Pertanto, non vedo alcun problema nell'usarlo come nome di variabile in una funzione ben scritta, in cui è chiaro che id non significa la funzione integrata.
È male nominare una variabile dopo una funzione integrata. Uno dei motivi è perché può essere fonte di confusione per un lettore che non sa che il nome viene ignorato.
'id' è un metodo integrato in Python. L'assegnazione di un valore a "id" sovrascriverà il metodo. È meglio usare un identificatore prima come in "some_id" o usarlo in un diverso metodo di capitalizzazione.
Il metodo integrato accetta un singolo parametro e restituisce un numero intero per l'indirizzo di memoria dell'oggetto passato.
>>>
Id (1)
9787760
>>>
x = 1
>>>
ID (x)
9787760
Perché è il nome di una funzione integrata.