9 Powerful Python Built-In Functions You’re Overlooking
18-Dec-24
คัมภีร์เทพ IT
See the original english version Click here!
คุณคงเคยสร้าง Functions เพื่อให้ทำงานบางอย่าง แต่หากใช้ Python คุณจะพบว่ามันมี Built-In Functions ที่ช่วยทำสิ่งนั้นอยู่แล้ว อีกทั้งยังช่วยให้เราประหยัดเวลาได้อีกด้วย ดังนั้นบทความนี้จะมาแนะนำ 9 Built-In Functions ทรงพลังของ Python ที่คุณไม่ควรมองข้าม
1. Zip_longest (Merge Iterables โดยไม่สนใจขนาดของ File)
zip_longest() Function จาก Itertools Module ใน Python จะช่วยให้คุณสามารถบีบอัด Iterable File ที่มีความยาวต่างกันได้หลาย File ซึ่งต่างจาก zip() ที่จะหยุดทำงานที่ Iterable File ที่สั้นที่สุด, zip_longest() จะยังคงบีบอัดไฟล์ต่อไปจนกว่าจะใช้ Iterable File ที่ยาวที่สุดจนหมด โดยเติมค่าที่ขาดหายไป (Missing Values) ด้วย fillvalue (ค่า Default คือ None)
- จัดการกับ Iterable File ที่มีความยาวไม่เท่ากัน: มันมีประโยชน์เมื่อต้องทำงานกับ Iterable File ที่มีความยาวต่างกัน ซึ่งจะช่วยให้มั่นใจได้ว่า ไม่มีข้อมูลสูญหายเนื่องจากขนาดที่ไม่เท่ากัน
- อนุญาตให้กำหนดค่า Fill ได้เอง: fillvalue Argument จะช่วยให้คุณสามารถระบุวิธีจัดการ กับค่าที่ขาดหายไปได้ ซึ่งจะช่วยเพิ่มความยืดหยุ่นเมื่อต้อง Merge ข้อมูลจากหลาย ๆ แหล่ง
สามารถใช้ ZIP_Longest Function ในกรณีที่:
- Merge ข้อมูลจากหลาย ๆ แหล่งที่มีความยาวไม่สม่ำเสมอ
- เปรียบเทียบ Data Points ที่ไม่มีความเชื่อมโยงกันโดยตรง
- ทำงานกับ Matrices หรือ Grids ที่มีมิติ (Dimension) ไม่เท่ากัน
ในตัวอย่างนี้ คุณจะเห็นว่า zip_longest() จะจับคู่ Elements จาก list1, list2 และ list3 เมื่อ Lists ที่มี Elements น้อยกว่าหมดลง ก็จะเติมตำแหน่งที่ขาดหายไปด้วย None หรือ fill value แบบกำหนดเอง '-'
2. Divmod (คำนวณการหารอย่างชาญฉลาด)
divmod(a, b) Function จะ Return เป็น Tuple ที่มีผลหารและเศษเหลือเมื่อหาร a ด้วย b ซึ่งเป็นรูปแบบผสมของ a // b (ผลหาร) และ a % b (เศษเหลือ)
Function นี้มีประโยชน์สำหรับสถานการณ์ที่ต้องใช้ทั้ง ผลหารและเศษเหลือ พร้อม ๆ กัน แทนที่จะดำเนินการแยกกันสองอย่าง (Integer Division และ Modulus) แต่ divmod() จะดำเนินการในขั้นตอนเดียว ทำให้ลด Overhead ได้
Divmod มีประโยชน์ในสถานการณ์ ต่อไปนี้:
- คุณต้องแปลงวินาทีเป็นนาทีและวินาที ชั่วโมงเป็นนาทีและชั่วโมง เป็นต้น divmod() จะคำนวณค่าทั้งสองค่าได้อย่างรวดเร็ว
- คำนวณการแยกย่อยของสกุลเงิน เช่น การแยกย่อยจำนวนเงินทั้งหมดเป็นหน่วยที่ใหญ่กว่าและเล็กกว่า
ในที่นี้ divmod(20, 6) จะ Return ค่า (3, 2) โดยที่ 3 คือ ผลหาร และ 2 ก็คือ เศษที่เหลือจากการหาร 20 ด้วย 6
3. Compile (แปลง Code เป็น Bytecode อย่างรวดเร็ว)
compile() Function ใน Python จะ Compile Source Code ไปเป็น Code Object ที่สามารถเรียกใช้ในภายหลังได้ Function นี้จะช่วยให้คุณแปลง String ของ Python Code เป็น Code Object ซึ่งสามารถส่งต่อไปยัง exec() หรือ eval() เพื่อเรียกใช้ได้
compile Function จะช่วยให้คุณสามารถเรียกใช้ Python Code ที่จัดเก็บไว้ในรูปแบบ String ซึ่งมีประโยชน์สำหรับกรณีการใช้งานในระดับ Advance เช่น Templating Engines, REPL Systems หรือเมื่อสร้าง Code แบบ Dynamic
ในตัวอย่างนี้ String '3 * 4 + 5' จะถูกคอมไพล์เป็น Code Object จากนั้นจึงประเมินผลโดยใช้ eval() โดยจะ Return ผลลัพธ์ของ Expression
4. Bytearray (สร้างและแก้ไข Byte Sequences)
bytearray() Function จะสร้าง Sequence ของ Bytes ที่สามารถแก้ไขได้ มันเป็นการแสดงถึงความยืดหยุ่นของ Byte Data ซึ่งแตกต่างจาก Bytes ที่ไม่สามารถเปลี่ยนแปลงได้ bytearray Function จะอนุญาตให้สามารถแก้ไขได้ ทำให้เหมาะสำหรับกรณีที่จำเป็นต้องจัดการหรืออัปเดต Byte Data
Byterarray จะอนุญาตให้แก้ไขได้ จึงทำให้เหมาะสำหรับสถานการณ์ที่จำเป็นต้องสร้างหรือแก้ไข Byte Data แบบ Dynamic อีกทั้ง Function นี้ยังมีประโยชน์ ในกรณีที่ต้องประมวลผล Byte Data จาก Files, Network Protocols หรือ Streams ที่ต้องมีการแก้ไขอยู่บ่อยครั้ง
ในตัวอย่างนี้ bytearray จะถูกสร้างขึ้นจาก String จากนั้นจะทำการแก้ไขด้วยการแทนที่ส่วนหนึ่งของ String นั้น
5. Repr (ดู Code ที่อยู่เบื้องหลัง Object)
repr() Function ใน Python จะ Return String Representation ของ Object ซึ่งโดยปกติแล้วจะใช้สร้าง Object ใหม่โดยใช้ eval() Function โดยมันจะแสดง Formal String Representation ของ Object ทำให้มันมีประโยชน์ในการ Debugging และ Logging
Function นี้แสดง Object ได้ละเอียดและแม่นยำกว่าเมื่อเปรียบเทียบกับ str() จึงทำให้มีประโยชน์อย่างยิ่งในการ Debug อีกทั้งมันยังมีประโยชน์ในกรณีที่คุณต้องทำการ Logging Object ที่มีความซับซ้อน คุณสามารถใช้ repr() เพื่อให้แน่ใจว่า Output มีข้อมูลอยู่และมีโครงสร้างที่ชัดเจน
ใน Interactive Environments นั้น repr() ถือเป็นวิธีที่รวดเร็วในการตรวจสอบ Object โดยไม่ต้องจัดรูปแบบด้วยตนเอง การใช้งาน __repr__() Method เข้ามาช่วยให้คุณควบคุมวิธีการแสดง Instances ของ Class ได้
ในตัวอย่างนี้ repr() จะส่ง Return String ที่แสดงในแต่ละประเภทของ Object ที่เน้นอักขระพิเศษ (เช่น เครื่องหมาย Quotes)
6. Memoryview (ช่วยให้เข้าถึง Memory โดยตรงได้ง่าย)
memoryview() Function ใน Python สร้าง Memory View Object ซึ่งช่วยให้คุณเข้าถึง Internal Data ของ Object ที่รองรับ Buffer Protocol โดยไม่ต้องคัดลอก Data มันมีประโยชน์อย่างยิ่งในกรณีของการจัดการ Data Sets ขนาดใหญ่ได้อย่างมีประสิทธิภาพ เนื่องจากช่วยให้สามารถจัดการ Data บางส่วนได้
Function นี้ช่วยลด Overhead ในการคัดลอก Data โดยอนุญาตให้เข้าถึง Memory พื้นฐานของ Objects ได้โดยตรง
Function นี้มีประโยชน์ในการคำนวณทางวิทยาศาสตร์หรือการวิเคราะห์ข้อมูล ซึ่งการจัดการ Arrays หรือ Buffers ที่มีขนาดใหญ่ถือเป็นเรื่องที่เกิดขึ้นได้ทั่วไป memoryview() Function สามารถช่วยปรับปรุงประสิทธิภาพได้เป็นอย่างมากด้วยการลดการใช้ Memory
ในตัวอย่างนี้ จะมีการสร้าง bytearray และ Memory View จะถูกใช้ในการเข้าถึงข้อมูลบางส่วนโดยไม่ต้องทำการคัดลอก
7. Property (จัดการ Attribute ด้วย Getter, Setter, และ Deleter)
property() Function เป็น Built-in Function ที่สร้างและจะ Return Property Object ซึ่งเป็น Attribute ชนิดพิเศษที่อนุญาตให้เข้าถึง Attribute ของ Object ได้ Properties จะช่วยให้สามารถใช้ Getter, Setter และ Deleter Methods สำหรับ Attribute ได้ รวมทั้งช่วยเพิ่ม Encapsulation และ Data Hiding
- Encapsulation: ช่วยให้ควบคุมวิธีการเข้าถึงและแก้ไข Attributes ได้ โดยสามารถเพิ่มในเรื่อง Validation และ Logging ได้
- Lazy Computation: ช่วยให้ Attribute ถูกคำนวณค่าเฉพาะเมื่อมีการเข้าถึงเท่านั้น
Function นี้มีประโยชน์เมื่อคุณต้องการบังคับใช้ข้อกำหนดเกี่ยวกับวิธีการปรับเปลี่ยน Attribute
ในตัวอย่างนี้ property() ถูกใช้เพื่อกำหนด radius ให้เป็น Attribute ที่จัดการได้ด้วย Getter และ Setter ในขณะที่ area เป็น Property ที่คำนวณได้แบบ Read-only
8. Frozenset (Immutable Sets สำหรับการดำเนินงานที่มีประสิทธิภาพ)
frozenset() Function จะ Return Immutable Set Object กลับมาให้ ซึ่งหมายความว่า เมื่อสร้างแล้ว จะไม่สามารถเปลี่ยนแปลง (เพิ่มหรือลบ) Elements ได้ ความสามารถนี้จะช่วยให้สามารถสร้าง Sets ที่สามารถใช้เป็น Keys ใน Dictionaries หรือเก็บไว้ใน Sets อื่นได้
ด้านล่างนี้คือตัวอย่างของสถานการณ์ ที่คุณสามารถใช้งาน Function นี้ได้:
- เมื่อคุณต้องการ Set ที่ไม่ควรเปลี่ยนแปลงตลอดอายุการใช้งาน
- เป็น Keys ใน Dictionaries เพื่อให้แน่ใจว่า Items แต่ละรายการ จะไม่ซ้ำกัน
- เนื่องจาก Frozen Sets เป็น Immutable (ไม่สามารถเปลี่ยนแปลงได้) จึงสามารถใช้เป็น Keys ใน Dictionaries ได้
9. Callable (ตรวจสอบว่า Object สามารถเรียกใช้ได้หรือไม่)
มันเป็น Built-in Function ของ Python ที่ใช้ตรวจสอบว่า Object นั้นสามารถเรียกใช้ได้หรือไม่ Callable จะช่วยป้องกัน Errors ในขณะ Runtime โดยตรวจสอบว่า Object นั้นสามารถเรียกใช้ได้หรือไม่ก่อนที่จะเรียกใช้งานจริง Function นี้มีประโยชน์เมื่อทำงานกับ Objects ที่อาจจะสามารถหรือไม่สามารถเรียกใช้ได้ในขณะ Runtime โดยเฉพาะใน Applications ที่ซับซ้อน ซึ่งอาจมีการส่งต่อ Functions, Lambdas หรือ Objects กันไปมา
Built-in Function นี้สามารถใช้ในสถานการณ์ที่ Functions, Lambdas หรือ Objects อาจถูกใช้สลับกันได้ ซึ่ง callable() จะช่วยตรวจสอบว่า Object สามารถเรียกใช้งานได้หรือไม่
ในตัวอย่างนี้ Greet() สามารถเรียกใช้ได้เนื่องจากเป็น Function แต่ x ซึ่งเป็นจำนวนเต็มนั้น ไม่สามารถเรียกใช้ได้
คุณยังสามารถทำให้ Instances ของ Class ที่สร้างขึ้นเอง (Custom Class) สามารถเรียกใช้งานได้ด้วยการ Define __call__() Method ขึ้นมา
ในกรณีนี้ Dog Class สามารถเรียกใช้ได้ด้วยการนำ __call__() Method มาใช้ โดย Instances dog จะทำงานเหมือน Function ซึ่งจะช่วยให้คุณสามารถส่ง Arguments ไปยัง Instances ได้โดยตรง
Bonus: Dis module
dis Module ใน Python มี Function สำหรับแยก bytecode ของ Python ซึ่งอาจมีประโยชน์ในการทำความเข้าใจว่า Python ดำเนินการกับ Code อย่างไร และช่วยในการ Debug
Function นี้จะช่วยให้ Developers สามารถดู Low-Level Operations ที่ Python สามารถดำเนินการได้ นอกจากนี้ยังช่วยในการระบุ Bottlenecks ของประสิทธิภาพการทำงานโดยการตรวจสอบ bytecode
Function นี้จะแสดง bytecode instructions สำหรับ example_function ซึ่งบ่งบอกถึงการดำเนินการที่ Python ใช้ในการRun Function นั้น
Output Screenshot
ที่มา: https://medium.com/
รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert
อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ
บทความล่าสุด