ต่อไปนี้คือข้อผิดพลาด/gotchas ในการเขียนโปรแกรมหลามที่พบบ่อยที่สุดที่โปรแกรมเมอร์ยอมรับ:
การค้นหาชื่อขอบเขต: Python ปฏิบัติตามกฎการกำหนดขอบเขตตามลำดับ LEGB (Local, Enclosing, Global, Built-in) เนื่องจาก python ไม่มีการผูกประเภทที่เข้มงวด โปรแกรมเมอร์จึงสามารถเชื่อมโยงตัวแปรขอบเขตภายนอกกับค่าอื่นที่อาจใช้ในขอบเขตภายนอกได้ในภายหลัง แต่ปัจจุบันถูกแทนที่ด้วยค่าอื่น
ไม่แยกความแตกต่างระหว่าง is และ =: ตัวดำเนินการใน python จะตรวจสอบว่าวัตถุทั้งสองอ้างถึงที่อยู่หน่วยความจำเดียวกันหรือไม่ ตัวดำเนินการ ==เรียกใช้ฟังก์ชัน __eq__ ซึ่งอาจตรวจสอบความเท่าเทียมกันที่แตกต่างกันสำหรับคลาสต่างๆ
การแก้ไขรายการขณะวนซ้ำ:หากคุณลบองค์ประกอบออกจากรายการในขณะที่วนซ้ำ คุณจะได้รับ IndexError เนื่องจากรายการมีขนาดลดลงในขณะที่คุณไม่ได้ลดดัชนีด้วย
การผูกปิด - พิจารณารหัสต่อไปนี้ -
ตัวอย่าง
listLambdas = [lambda x : i + x for i in range(5)] for lam in listLambdas: print(lam(10))
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
14 14 14 14 14
ตกใจ? นี่เป็นเพราะมีผลผูกพันในการปิด lambdas ทั้งหมดในรายการนี้อ้างอิงถึงตัวแปร i กล่าวคือ เมื่อมีการเปลี่ยนแปลง lambdas เหล่านี้จะเริ่มอ้างอิงถึงค่าใหม่
ตั้งชื่อขัดแย้งกับบิวด์อิน: คุณต้องมีในบางช่วงเวลาที่สร้างตัวแปรที่เรียกว่าผลรวม โปรดทราบว่าคุณได้กำหนดการอ้างอิงใหม่ให้กับฟังก์ชัน sum ในกรณีนี้ ดูเหมือนว่าจะไม่สำคัญสำหรับสิ่งนี้ แต่อาจทำให้เกิดปัญหาร้ายแรงเมื่อมีการตั้งชื่อแพ็คเกจในลักษณะดังกล่าว นี่อาจทำให้แพ็คเกจอื่นนำเข้าคลาสของคุณแทนที่จะเป็นคลาสมาตรฐาน
การใช้งานที่ใช้งานง่ายสำหรับโอเปอเรเตอร์: Python จัดเตรียมวิธีการโอเวอร์โหลดฟังก์ชันโอเปอเรเตอร์สำหรับคลาส บ่อยครั้ง ผู้คนมักจะปรับใช้โอเปอเรเตอร์เหล่านี้ในลักษณะที่ไม่ธรรมดาและจบลงด้วยการสร้าง API ที่ซับซ้อนและไม่ได้ใช้งาน