Her pkzaman döndürdüğünü bildiğim Django projelerinde , işlevle (değişken adları hariç her yerde) çakışmadığında idkullanmayı tercih ederim . Bunun nedeni, öznitelik adını aramak zaman aldığı için 7 kat daha yavaş bir özellik olmasıdır .idid()pkidpkmeta
%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)
İlgili Django kodu şöyledir:
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)
Adında bir değişken kullanmam gerektiğinde çok nadir görülen bir durumdur pk. Bunun user_idyerine daha ayrıntılı bir şey kullanmayı tercih ederim pk.
Tüm projede aynı sözleşmeyi izlemek tercih edilir. Sizin durumunuzda idbir özellik değil, bir parametre adı vardır, bu nedenle zamanlamalarda neredeyse hiçbir fark yoktur. Parametre adları yerleşik id()işlevin adıyla çakışmaz , bu nedenle idburada kullanmak güvenlidir .
Özetlemek gerekirse, alan adı idmı yoksa pkkısayol mu kullanacağınızı seçmek size kalmıştır . Django için bir kitaplık geliştirmiyorsanız ve tüm modeller için otomatik birincil anahtar alanları kullanıyorsanız, idher yerde kullanmak güvenlidir , bu da bazen daha hızlıdır. Diğer taraftan, birincil anahtar alanlarına (muhtemelen özel) evrensel erişim istiyorsanız, pkher yerde kullanın . Mikrosaniyenin üçte biri web için bir şey değildir.
idpk