Dalam proyek Django di mana saya tahu bahwa pkselalu kembali idsaya lebih suka menggunakan idketika tidak berbenturan dengan id()fungsi (di mana-mana kecuali nama variabel). Alasan untuk ini adalah itu pkadalah properti yang 7 kali lebih lambat daripada idkarena butuh waktu mencari pknama 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_iddaripada pk.
Mengikuti konvensi yang sama lebih disukai di seluruh proyek. Dalam kasus Anda idadalah 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 idsini.
Singkatnya, terserah Anda untuk memilih apakah akan menggunakan nama bidang idatau pkpintasan. Jika Anda tidak mengembangkan perpustakaan untuk Django dan menggunakan bidang kunci utama otomatis untuk semua model, aman digunakan di idmana saja, yang terkadang lebih cepat. Dari sisi lain, jika Anda ingin akses universal ke bidang kunci utama (mungkin khusus), gunakan di pkmana-mana. Sepertiga mikrodetik bukan apa-apa untuk web.
iddan untukpk