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

เหตุใดโค้ด Python จึงทำงานเร็วขึ้นในฟังก์ชัน


พบว่าหากรันโค้ด python ตามปกติ และจากนั้นหากรันในฟังก์ชัน python โค้ดจะทำงานเร็วขึ้นในกรณีหลัง ฉันต้องการทราบว่าเหตุใดโค้ดหลามจึงทำงานเร็วขึ้นในฟังก์ชัน

โดยทั่วไปจะพบว่าการจัดเก็บตัวแปรในเครื่องทำได้เร็วกว่าตัวแปรส่วนกลางในฟังก์ชันหลาม สามารถอธิบายได้ดังนี้

นอกเหนือจากเวลาจัดเก็บตัวแปรในเครื่อง/ทั่วโลกแล้ว การคาดคะเน opcode ยังทำให้ฟังก์ชันทำงานเร็วขึ้น

CPython คือการใช้งาน Python ดั้งเดิมที่เราดาวน์โหลดจาก Python.org มันถูกเรียกว่า CPython เพื่อแยกความแตกต่างจากการปรับใช้ Python ในภายหลัง และเพื่อแยกความแตกต่างของการใช้งานเอ็นจิ้นภาษาจากภาษาการเขียนโปรแกรม Python เอง

CPython ถูกใช้งานในภาษา C CPython รวบรวมโค้ดไพ ธ อนของเราเป็น bytecode และตีความ bytecode นั้นในลูปการประเมิน

เมื่อมีการคอมไพล์ฟังก์ชัน ตัวแปรโลคัลจะถูกเก็บไว้ในอาร์เรย์ขนาดคงที่ (ไม่ใช่ dict) และชื่อตัวแปรจะถูกกำหนดให้กับดัชนี เป็นไปได้เนื่องจากคุณไม่สามารถเพิ่มตัวแปรโลคัลให้กับฟังก์ชันแบบไดนามิกได้ จากนั้นการดึงตัวแปรโลคัลเป็นการค้นหาตัวชี้ในรายการและการนับใหม่เพิ่มขึ้นใน PyObject ซึ่งไม่สำคัญ

เปรียบเทียบสิ่งนี้กับการค้นหาทั่วโลก ซึ่งเป็นการค้นหา dict จริงที่เกี่ยวข้องกับแฮช และอื่นๆ อนึ่ง นี่คือเหตุผลที่คุณต้องระบุ global หากคุณต้องการให้ตัวแปรเป็น global:หากคุณเคยกำหนดให้กับตัวแปรภายในขอบเขต คอมไพเลอร์จะออก STORE_FAST สำหรับการเข้าถึง เว้นแต่คุณจะบอกไม่ให้ทำ

อย่างไรก็ตาม การค้นหาทั่วโลกยังค่อนข้างเหมาะสม การค้นหาแอตทริบิวต์นั้นช้ามาก!