“ ความประหลาดใจน้อยที่สุด” และอาร์กิวเมนต์เริ่มต้นที่เปลี่ยนแปลงได้
ทุกคนที่มี Python นานพอถูกกัด (หรือฉีกเป็นชิ้น ๆ ) โดยปัญหาต่อไปนี้: def foo(a=[]): a.append(5) return a [5]สามเณรงูใหญ่คาดว่าจะได้ฟังก์ชั่นนี้เสมอกลับรายการที่มีเพียงองค์ประกอบหนึ่ง: ผลลัพธ์จะแตกต่างกันมากและน่าประหลาดใจมาก (สำหรับมือใหม่): >>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5] >>> foo() ผู้จัดการของฉันเคยพบกับคุณสมบัตินี้ครั้งแรกและเรียกมันว่า "ข้อบกพร่องในการออกแบบที่น่าทึ่ง" ของภาษา ฉันตอบว่าพฤติกรรมนั้นมีคำอธิบายพื้นฐานและเป็นเรื่องที่ทำให้งงงวยและคาดไม่ถึงถ้าคุณไม่เข้าใจ internals อย่างไรก็ตามฉันไม่สามารถตอบคำถามต่อไปนี้ (กับตัวเอง): อะไรคือเหตุผลในการเชื่อมอาร์กิวเมนต์เริ่มต้นที่คำจำกัดความของฟังก์ชั่นและไม่ทำงานในการดำเนินการ? ฉันสงสัยว่าพฤติกรรมที่มีประสบการณ์นั้นมีประโยชน์ในทางปฏิบัติ (ใครใช้ตัวแปรคงที่ใน C โดยไม่ต้องปรับปรุงบั๊ก) แก้ไข : Baczek …