Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ทำไมโค้ด Python ในฟังก์ชันจึงรันเร็วกว่าระดับโมดูล

โค้ดในฟังก์ชันรันเร็วกว่าระดับโมดูล (global scope) หลักสองเหตุผล:

  1. Local variables เร็วกว่า Globals: ตัวแปร local จัดเก็บใน fixed-size array (ไม่ใช่ dict) ตอนคอมไพล์ ชื่อตัวแปร map ไปยัง index การเข้าถึงคือ pointer lookup + refcount increase เร็วมาก
  2. Opcode prediction: CPython (ตัวแปลภาษามาตรฐาน) คอมไพล์เป็น bytecode แล้ว interpret ใน evaluation loop ฟังก์ชันทำให้ optimizer ทำนาย opcode ได้ดีขึ้น

Global lookup ต้อง hash ใน dict ช้ากว่า Attribute lookup (เช่น obj.attr) ช้าที่สุด

นั่นคือเหตุผลที่ควรใส่โค้ดในฟังก์ชันเพื่อประสิทธิภาพ

ตัวแปร local จัดเก็บใน array เร็วกว่า global dict และ opcode prediction ทำให้ฟังก์ชันรันเร็วขึ้น