หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ
โมดูลคณิตศาสตร์
การตรวจสอบโค้ด
วัตถุประสงค์
ตรวจสอบรายการเก่า ๆ ที่ซ่อนอยู่ในห้องใต้หลังคาโดยใช้การตรวจสอบโค้ดเพื่อหาว่ามีอะไรบ้างและใช้งานอย่างไร
ในห้องใต้หลังคามีสำนักงานที่ใช้งานไม่บ่อย และมีหีบเก่า ๆ อยู่ไม่กี่กล่องที่บรรจุสิ่งมีค่า ซึ่งได้ถูกลืมเลือนไปนาน ถ้าไม่มีการบอกกล่าวหรือมีบันทึกข้อมูลบางอย่างอยู่ บางครั้งอาจจะค่อนข้างยากที่จะระบุรายการ หรือค่าคงที่ที่ถูกรวบรวมในสนาม นอกจากนั้นแล้ว อาจจะยากที่จะระบุขอบเขตของสิ่งที่คุณสามารถทำได้กับออบเจ็กต์เฉพาะหนึ่ง หรือคุณสมบัติของมัน ในการแก้ไขปัญหานี้ เราสามารถใช้การตรวจสอบโค้ด (Code Introspection) ได้
การตรวจสอบโค้ดช่วยให้เราสามารถตรวจสอบและระบุชิ้นส่วนโค้ดบางส่วนและบอกคุณสมบัติบางประการของมัน สำหรับเรื่องนี้ เราจะใช้ฟังก์ชันตรวจสอบ 4 ฟังก์ชันที่ติดมากับโค้ดพื้นฐานของ Python ได้แก่ type() , id() , repr() , dir() และ help() ซึ่งทำงานดังนี้:
type(): ฟังก์ชันนี้จะแจ้งให้คุณทราบว่าออบเจ็กต์ประเภทใดที่ส่งเป็นอาร์กิวเมนต์เข้ามา เช่น ถ้าคุณส่งตัวแปรเป็นอาร์กิวเมนต์ ฟังก์ชันจะระบุออบเจ็กต์ว่าเป็นตัวแปรid(): ทุกออบเจ็กต์ที่ถูกสร้างขึ้นใน Python มีไอดีเฉพาะที่ใช้ระบุออบเจ็กต์ภายในโค้ด โดยการส่งออบเจ็กต์เป็นอาร์กิวเมนต์ให้ฟังก์ชันนี้ จะได้ไอดีเฉพาะของออบเจ็กต์นั้นrepr(): แปลงค่าที่ไม่ใช่สตริงให้เป็นสตริง มีประโยชน์ในการแปลงข้อมูลให้เป็นรูปแบบที่อ่านได้dir(): แสดงคุณสมบัติทั้งหมดที่ออบเจ็กต์มี มีประโยชน์ในการทราบถึงสิ่งที่สามารถทำได้กับออบเจ็กต์เฉพาะหนึ่งhelp(): แสดงข้อมูลทั้งหมดเกี่ยวกับออบเจ็กต์, ฟังก์ชัน, คลาส ฯลฯ ที่มีอยู่ในทะเบียนของ Python
นอกจากนี้เรามีฟังก์ชันแบบอะซิงโครนัสใหม่คือฟังก์ชัน display() ซึ่งคล้ายกับฟังก์ชัน read() แต่ช่วยให้คุณแสดงข้อมูลไดนามิกได้ เหมือนกับฟังก์ชันตรวจสอบโค้ดที่สร้างข้อมูลไดนามิก รูปแบบการใช้งานคือ: await player.display( -data-) ฟังก์ชันเหล่านี้ทั้งหมดจะเป็นประโยชน์ในการวิเคราะห์ข้อมูล ซึ่งมีประโยชน์เมื่อเราใช้ Methods และเริ่มนำเข้าฟังก์ชันใหม่ ๆ รวมถึงสำหรับวิเคราะห์โค้ดใด ๆ ที่เราต้องการระบุคุณสมบัติ
เราจะใช้ฟังก์ชันเหล่านี้เพื่อระบุและบันทึกรายการที่เก็บอยู่ในห้องใต้หลังคา เริ่มแรก ให้เดินไปยังเครื่องหมาย X สีเข้มที่อยู่เหนือพรมสีต่าง ๆ โดยเริ่มจากพรมสีแดง ในพื้นที่นี้มีค่าคงที่สาม (3) รายการ ได้แก่ red_container , green_container , และ blue_container ค่าคงที่เหล่านี้แทนภาชนะในแต่ละหีบที่สอดคล้องกับพรมสีแต่ละสี
สำหรับแต่ละเครื่องหมาย X ให้เผชิญหน้ากับหีบและใช้ฟังก์ชัน open() เพื่อเปิดหีบ ใช้ฟังก์ชัน collect() พร้อมกับค่าคงที่ของพรมสีที่สอดคล้องเพื่อหยิบมันจากหีบ ใช้ฟังก์ชันตรวจสอบ type() เพื่อระบุว่าค่าคงที่ในหีบนั้นเป็นประเภทใด ผลลัพธ์ที่ได้เป็นข้อมูลดิบและสำหรับเรื่องนี้เราใช้ฟังก์ชัน repr() เพื่อแปลงให้เป็นสตริง ใช้ฟังก์ชัน speak() เพื่อแสดงสตริงที่ได้จากการรวมฟังก์ชันและค่าคงที่ เช่น: player.speak(repr(type(red_container))) ตามด้วยการใช้ฟังก์ชัน speak() กับค่าคงที่เพื่อระบุเนื้อหาโดยตรง เช่น: player.speak(red_container)
เมื่อค่าคงที่ทั้งสาม (3) ได้ถูกเก็บ รหัสตรวจสอบ และระบุแล้ว ให้เดินไปที่เครื่องหมาย X สีอ่อนหน้าสุดของโต๊ะ สร้างตัวแปรสามตัวชื่อว่า: item_id_red , item_id_green , item_id_blue ซึ่งจะใช้สำหรับเก็บหมายเลขไอดีของค่าคงที่แต่ละตัวที่คุณเก็บมา ใช้ฟังก์ชันตรวจสอบ id() เพื่อรับหมายเลขประจำตัวเฉพาะของค่าคงที่โดยการเพิ่มมันเป็นอาร์กิวเมนต์ จับคู่ชื่อของตัวแปรกับชื่อของค่าคงที่ด้วยรูปแบบดังนี้: item_id_red = id(red_container) ทำเช่นนี้สำหรับตัวแปรและค่าคงที่ทั้งสาม (3) ทั้งหมด
เมื่อทั้งสาม (3) ตัวแปรได้รับการกำหนดค่าแล้ว ให้นำตัวแปรทั้งหมดเก็บไว้ในรายชื่อที่ชื่อ item_list และที่เครื่องหมาย X สีอ่อน ใช้ฟังก์ชัน display() เพื่อให้แน่ใจว่ามันถูกจดบันทึกในบันทึกบนโต๊ะ เช่น: await player.display(item_list)
เมื่อรายชื่อได้รับการบันทึกแล้ว ให้เดินไปที่เครื่องหมาย X สีเข้มเหนือพรมสีม่วงและเผชิญหน้ากับโต๊ะ ที่นี่เราจะใช้ฟังก์ชัน dir() เพื่อระบุว่ารายชื่อนั้นมีคุณสมบัติอะไรบ้าง อย่างไรก็ตามผลลัพธ์ที่ได้เป็นข้อมูลดิบซึ่งอาจจะแสดงได้ยาก สำหรับเรื่องนี้เราใช้ฟังก์ชัน repr() เพื่อแปลงข้อมูลให้เป็นสตริงที่อ่านได้ สร้างตัวแปรชื่อ item_attributes และเก็บสตริงที่ได้ เช่น: item_attributes = repr(dir(item_list)) สุดท้าย ใช้ฟังก์ชัน display() เพื่อให้แน่ใจว่ามันถูกจดบันทึกในบันทึกบนโต๊ะ
เดินไปที่เครื่องหมาย X สีเข้มเหนือพรมสีขาวเพื่อทำเช่นเดียวกับที่คุณทำกับ dir() แต่ใช้ help() ซึ่งจะอธิบายการใช้งานเอกสารทั้งหมดของออบเจ็กต์ สร้างตัวแปรชื่อ item_help และเก็บสตริงที่ได้ เช่น: item_help = repr(help(item_list)) สุดท้าย ใช้ฟังก์ชัน read() เพื่อให้แน่ใจว่ามันถูกจดบันทึกในบันทึกบนโต๊ะเช่นกัน เพื่อให้ระดับนี้สำเร็จ