In Django-Projekten, von denen ich weiß, dass sie pk
immer zurückkehren, id
bevorzuge ich die Verwendung, id
wenn sie nicht mit der id()
Funktion kollidieren (überall außer Variablennamen). Der Grund dafür ist, dass pk
es sich um eine Eigenschaft handelt, die siebenmal langsamer ist als id
die Suche nach pk
Attributnamen in meta
.
%timeit obj.id
46 ns ± 0.187 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit obj.pk
347 ns ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Hier ist der relevante Django-Code:
def _get_pk_val(self, meta=None):
meta = meta or self._meta
return getattr(self, meta.pk.attname)
def _set_pk_val(self, value):
return setattr(self, self._meta.pk.attname, value)
pk = property(_get_pk_val, _set_pk_val)
Es ist wirklich ein seltener Fall, wenn ich eine Variable mit dem Namen verwenden muss pk
. Ich bevorzuge es, etwas ausführlicheres zu verwenden, user_id
anstatt pk
.
Die Befolgung derselben Konvention ist für das gesamte Projekt vorzuziehen. In Ihrem Fall id
handelt es sich um einen Parameternamen, nicht um eine Eigenschaft, sodass sich die Timings kaum unterscheiden. Parameternamen kollidieren nicht mit dem Namen der integrierten id()
Funktion, daher ist die Verwendung sicherid
hier .
Zusammenfassend liegt es an Ihnen, zu entscheiden, ob Sie den Feldnamen id
oder die pk
Verknüpfung verwenden möchten. Wenn Sie keine Bibliothek für Django entwickeln und für alle Modelle automatische Primärschlüsselfelder verwenden, können Sie diese id
überall verwenden, was manchmal schneller ist. Wenn Sie andererseits universellen Zugriff auf (wahrscheinlich benutzerdefinierte) Primärschlüsselfelder wünschen, verwenden Sie diese pk
überall. Eine Drittel-Mikrosekunde ist nichts für das Web.
id
und fürpk