it-swarm.it

'id' è un nome variabile errato in Python

Perché è male nominare una variabile id in Python?

117
brian buck

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.

120
Kevin Little

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
48

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

44
DavidRR

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.

41
Sebastian Rittau

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

4
Toni Ruža

'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

1
brian buck

Perché è il nome di una funzione integrata.

1
ahockley