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

ข้อผิดพลาดทั่วไปในการเขียนโปรแกรม Python ที่นักพัฒนาทำบ่อย

นี่คือข้อผิดพลาดในการเขียนโปรแกรม Python ที่พบบ่อยที่สุดหรือ "Gotchas" ที่นักเขียนโปรแกรมมักทำ:

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

ผลลัพธ์

14
14
14
14
14

ประหลาดใจไหม? สิ่งนี้เกิดจากการผูกค่าใน Enclosures ทุกฟังก์ชัน lambda ในลิสต์นี้ "อ้างอิง" (REFER) ไปที่ตัวแปร i คือ เมื่อค่าของ i เปลี่ยน ฟังก์ชัน lambda ทั้งหมดจะเริ่มอ้างอิงไปที่ค่าใหม่

  • ชื่อชนกับฟังก์ชันสร้างภายใน (Name Clash with Built-ins) - คุณต้องเคยสร้างตัวแปรชื่อ sum ไปบ้าง สังเกตว่าในกรณีนี้คุณได้กำหนดการอ้างอิงใหม่ให้กับฟังก์ชัน sum แม้จะดู瑣碎สำหรับสิ่งแบบนี้ แต่สามารถก่อให้เกิดปัญหาร้ายแรงได้เมื่อแพ็กเกจถูกตั้งชื่อในลักษณะดังกล่าว ซึ่งอาจทำให้แพ็กเกจอื่นนำคลาสของคุณไปใช้แทนที่จะเป็นมาตรฐาน
  • การนำออเปอเรเตอร์ไปใช้งานแบบไม่น่าเข้าใจ (Unintuitive Implementations for Operators) - Python มีวิธีการให้สร้างออเปอเรเตอร์โหลดโอเวอร์โหลดสำหรับคลาส บ่อยครั้งที่คนมักนำออเปอเรเตอร์เหล่านี้ไปใช้งานในลักษณะที่ไม่คุ้นเคย และสุดท้ายก็สร้าง API ที่ซับซ้อนและไม่น่าเข้าใจ