Dans les projets Django où je sais que ça pk
revient toujours, id
je préfère utiliser id
quand ça ne heurte pas la id()
fonction (partout sauf les noms de variables). La raison en est qu'il pk
s'agit d'une propriété 7 fois plus lente que la id
recherche du pk
nom d'attribut en temps 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)
Voici le code Django pertinent:
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)
C'est vraiment un cas rare lorsque j'ai besoin d'utiliser une variable nommée pk
. Je préfère utiliser quelque chose de plus verbeux, comme user_id
au lieu de pk
.
Suivre la même convention est préférable pour l'ensemble du projet. Dans votre cas, il id
s'agit d'un nom de paramètre, et non d'une propriété, il n'y a donc presque aucune différence de synchronisation. Les noms de paramètres ne sont pas en conflit avec le nom de la id()
fonction intégrée, il est donc sûr de l'utiliser id
ici.
Pour résumer, c'est à vous de choisir d'utiliser le nom du champ id
ou le pk
raccourci. Si vous ne développez pas de bibliothèque pour Django et utilisez des champs de clé primaire automatiques pour tous les modèles, il est sûr de les utiliser id
partout, ce qui est parfois plus rapide. D'un autre côté, si vous souhaitez un accès universel aux champs de clé primaire (probablement personnalisés), utilisez-les pk
partout. Un tiers de microseconde n'est rien pour le web.
id
et pourpk