it-swarm-eu.dev

'id' ist ein falscher Variablenname in Python

Warum ist es schlecht, eine Variable id in Python zu benennen?

117
brian buck

id() ist ein grundlegendes eingebautes:

Hilfe zur eingebauten Funktion id im Modul __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.)

Im Allgemeinen ist die Verwendung von Variablennamen, die ein Schlüsselwort oder eine integrierte Funktion in einer beliebigen Sprache in den Hintergrund stellen, eine schlechte Idee, auch wenn dies zulässig ist.

120
Kevin Little

id ist eine integrierte Funktion, die die Speicheradresse eines Objekts angibt. Wenn Sie eine Ihrer Funktionen id nennen, müssen Sie __builtins__.id, um das Original zu erhalten. Das globale Umbenennen von id ist in nichts anderem als einem kleinen Skript verwirrend.

Die Wiederverwendung von integrierten Namen als Variablen ist jedoch nicht so schlimm, solange sie lokal verwendet werden. Python hat eine Menge von eingebauten Funktionen, die (1) gemeinsame Namen haben und (2) die Sie sowieso nicht viel verwenden werden. Verwenden Sie diese als lokale Variablen oder als Mitglieder eines Objekts sind in Ordnung, da aus dem Kontext ersichtlich ist, was Sie tun:

Beispiel:

def numbered(filename):
  file = open(filename)
  for i,input in enumerate(file):
    print "%s:\t%s" % (i,input)
  file.close()

Einige integrierte Funktionen mit verlockenden Namen:

  • id
  • file
  • list
  • map
  • all, any
  • complex
  • dir
  • input
  • slice
  • buffer

In PEP 8 - Style Guide für Python Code wird im Abschnitt Descriptive: Stile benennen :

  • single_trailing_underscore_: Wird nach Konvention verwendet, um Konflikte mit dem Schlüsselwort Python=, z.

    Tkinter.Toplevel(master, class_='ClassName')

Um die Frage zu beantworten, ist ein Beispiel, das diese Richtlinie anwendet:

id_ = 42

Das Einbeziehen des abschließenden Unterstrichs in den Variablennamen macht die Absicht deutlich (für diejenigen, die mit den Anleitungen in PEP 8 vertraut sind).

44
DavidRR

Ich könnte hier etwas Unbeliebtes sagen: id() ist eine ziemlich spezialisierte integrierte Funktion, die in der Geschäftslogik selten verwendet wird. Daher sehe ich kein Problem darin, es als Variablennamen in einer engen und gut geschriebenen Funktion zu verwenden, wobei klar ist, dass id nicht die eingebaute Funktion bedeutet.

41

Es ist schlecht, eine Variable nach einer eingebauten Funktion zu benennen. Einer der Gründe ist, dass dies für einen Leser verwirrend sein kann, der nicht weiß, dass der Name überschrieben wird.

4
Toni Ruža

'id' ist eine in Python integrierte Methode. Wenn Sie 'id' einen Wert zuweisen, wird die Methode überschrieben. Es ist am besten, einen Bezeichner vorher wie in "some_id" zu verwenden oder ihn in einer anderen Großschreibungsmethode zu verwenden.

Die eingebaute Methode verwendet einen einzelnen Parameter und gibt eine Ganzzahl für die Speicheradresse des übergebenen Objekts zurück.

>>>id (1)

9787760

>>>x = 1

>>>id (x)

9787760

1
brian buck

Weil es der Name einer eingebauten Funktion ist.

1
ahockley