Dalam proyek Django di mana saya tahu bahwa pk
selalu kembali id
saya lebih suka menggunakan id
ketika tidak berbenturan dengan id()
fungsi (di mana-mana kecuali nama variabel). Alasan untuk ini adalah itu pk
adalah properti yang 7 kali lebih lambat daripada id
karena butuh waktu mencari pk
nama atribut di 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)
Berikut adalah kode Django yang relevan:
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)
Ini benar-benar kasus yang jarang terjadi ketika saya perlu menggunakan variabel bernama pk
. Saya lebih suka menggunakan sesuatu yang lebih verbose, seperti user_id
daripada pk
.
Mengikuti konvensi yang sama lebih disukai di seluruh proyek. Dalam kasus Anda id
adalah nama parameter, bukan properti, jadi hampir tidak ada perbedaan dalam timing. Nama parameter tidak berbenturan dengan nama id()
fungsi bawaan, jadi aman untuk digunakan di id
sini.
Singkatnya, terserah Anda untuk memilih apakah akan menggunakan nama bidang id
atau pk
pintasan. Jika Anda tidak mengembangkan perpustakaan untuk Django dan menggunakan bidang kunci utama otomatis untuk semua model, aman digunakan di id
mana saja, yang terkadang lebih cepat. Dari sisi lain, jika Anda ingin akses universal ke bidang kunci utama (mungkin khusus), gunakan di pk
mana-mana. Sepertiga mikrodetik bukan apa-apa untuk web.
id
dan untukpk