Rumah > pembangunan bahagian belakang > Tutorial Python > Sejauh manakah pembolehubah tempatan python lebih baik berbanding global, atribut atau slot?

Sejauh manakah pembolehubah tempatan python lebih baik berbanding global, atribut atau slot?

Barbara Streisand
Lepaskan: 2024-12-28 02:07:11
asal
517 orang telah melayarinya

How much better are python local variables over globals, attributes, or slots?

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:

  • Atribut kelas,
  • Atribut contoh,
  • Atribut Instance Slot,
  • Atribut kaedah dan
  • Atribut fungsi (bukan kaedah)?

Menguji

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    

Salin selepas log masuk
Salin selepas log masuk

Semua kod ada di bahagian bawah siaran ini.

Keputusan

|                                        |      |        | 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% |

Salin selepas log masuk

Penjelasan:
Apabila membandingkan prestasi, sentiasa bandingkan (Pencapaian / Sumber), seperti Batu setiap Gelen, atau Pengiraan sesaat, bukannya Liter setiap Km, atau Saat setiap Pengiraan.

  • Masa adalah seperti yang dilaporkan mengikut timeit, terhad kepada 3 digit bererti.
  • Kadar ialah timbal balik masa. Berapa banyak sesaat.
  • Prestasi relatif ialah kadar berbanding yang terbaik. Dengan menggunakan prestasi relatif, lebih besar adalah lebih baik, dan dua kali lebih besar adalah dua kali lebih baik.

Penemuan

Ya, pembolehubah tempatan adalah yang terpantas.

Prestasi pelbagai jenis pembolehubah dikelompokkan kepada tiga kumpulan.

  1. Pembolehubah berslot contoh tempatan, global dan kelas: Pembolehubah global adalah 96% sepantas tempatan, manakala atribut berslot contoh kelas adalah 92% sepantas.
  2. Atribut Kelas, atribut contoh kelas tidak berslot dan atribut fungsi: Ini berprestasi, masing-masing, pada 62%, 59% dan 55% daripada pembolehubah tempatan.
  3. Atribut kaedah: Menggunakan atribut kaedah berada dalam kelasnya sendiri, pada 31% daripada prestasi pembolehubah setempat.

Kesimpulan

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.

Kod

      def testINSA(self):
          s=0
          for i in range(10000000):
            s+=self.INSA # what is after the = differs in each function.
          return s    

Salin selepas log masuk
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan