Sebagai alternatif, sejauh manakah lebih teruk yang lain berbanding dengan pembolehubah tempatan?
Apa masalahnya?
Sesetengah artikel menasihatkan pengaturcara python untuk menggunakan pembolehubah tempatan jika ia akan digunakan dengan banyak, walaupun hanya dirujuk tetapi tidak diubah.
Sebagai contoh, berikut ialah dua petikan daripada "Membuat Program Python Berkobar Pantas" :
"Sebenarnya terdapat perbezaan dalam kelajuan carian walaupun antara - katakan - pembolehubah tempatan dalam fungsi (paling pantas), atribut peringkat kelas (cth. self.name - lebih perlahan) dan global contohnya fungsi yang diimport seperti time.time (paling perlahan) ."
"Jangan Akses Atribut
Perkara lain yang mungkin memperlahankan atur cara anda ialah pengendali titik (.) yang digunakan semasa mengakses atribut objek. Operator ini mencetuskan carian kamus menggunakan getattribute, yang menghasilkan overhed tambahan dalam kod anda. "
Selain itu, ini bukan satu-satunya kemungkinan. Bagaimana pula dengan perbezaan antara:
Saya menguji dengan menggunakan semua ini dalam gelung dengan 1,000,000 lelaran, tetapi kerja minimum setiap lelaran di dalamnya. Fungsi adalah semua kaedah kelas, kecuali fungsi yang digunakan untuk menguji atribut fungsi untuk fungsi di luar kelas.
Fungsi biasa ialah dalam bentuk:
def testINSA(self): s=0 for i in range(10000000): s+=self.INSA # what is after the = differs in each function. return s
Semua kod ada di bahagian bawah siaran ini.
| | | | Relative | | Where | Time | Rate | Performance | | LV Local Variable | 1.92 | 0.5208 | 100% | | GV Global Variable | 1.99 | 0.5020 | 96% | | ISA Instance Slotted Attribute | 2.09 | 0.4789 | 92% | | CA Class Attribute | 3.12 | 0.3204 | 62% | | INSA Instance Non-Slotted Attribute | 3.28 | 0.3051 | 59% | | FA Function Attribute | 3.49 | 0.2865 | 55% | | MA Method Attribute | 6.29 | 0.1589 | 31% |
Penjelasan:
Apabila membandingkan prestasi, sentiasa bandingkan (Pencapaian / Sumber), seperti Batu setiap Gelen, atau Pengiraan sesaat, bukannya Liter setiap Km, atau Saat setiap Pengiraan.
Ya, pembolehubah tempatan adalah yang terpantas.
Prestasi pelbagai jenis pembolehubah dikelompokkan kepada tiga kumpulan.
Kejutannya ialah berbanding dengan kebijaksanaan biasa, globals adalah kedua terbaik, lebih baik walaupun daripada atribut contoh berslot dalam kelas. Satu lagi kejutan ialah atribut kaedah adalah yang paling teruk.
def testINSA(self): s=0 for i in range(10000000): s+=self.INSA # what is after the = differs in each function. return s
Atas ialah kandungan terperinci Sejauh manakah pembolehubah tempatan python lebih baik berbanding global, atribut atau slot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!