5 Advanced Features of Python and how to use them

10-Jul-19

คัมภีร์เทพ IT

See the original english version Click here!

 

Python เป็นภาษาที่ใช้งานง่าย แต่ทรงพลัง คำถามคือ คุณได้ใช้ทุกสิ่งที่ Python มีให้แล้วหรือยัง หากคุณกำลัง Coding ใน Project ที่มีความซับซ้อนและกำลังหา Solutions บางอย่างจากใน Website หรือ Community ต่างๆ เพื่อแก้ไขปัญหาที่กำลังเจออยู่ เชื่อว่าบทความนี้จะมีทางออกให้คุณ เพราะมันคือ 5 Advanced Features ของ Python พร้อมทั้งวิธีใช้งาน ที่คุณจะสามารถนำไปประยุกต์ใช้กับ Project ที่คุณกำลังทำอยู่ได้

1. Lambda functions

Lambda Function เป็น Function ที่มีขนาดเล็กและไม่มีชื่อที่ระบุชัดเจน (ที่ว่า ไม่มีชื่อระบุชัดเจน ก็คือ มันไม่มีชื่ออย่างแท้จริง) 

โดยทั่วไปแล้ว Lambda Function จะถูกกำหนดโดยใช้รูปแบบคือ def a_function_name() แต่สำหรับ Lambda Function แล้ว เราจะไม่ตั้งชื่อให้พวกมัน ที่เราทำเช่นนี้ก็เพราะวัตถุประสงค์ของ Lambda Function ก็เพื่อ เป็นการแสดงนิพจน์ (Expression) หรือการดำเนินการ (Operation) บางชนิด โดยที่ไม่จำเป็นต้องกำหนด Function เต็มรูปแบบไปเสียทั้งหมด

Lambda Function สามารถรับ Arguments จำนวนเท่าใดก็ได้ แต่จะต้องมีเพียงแค่นิพจน์ (Expression) เดียวเสมอ 

 

คุณจะเห็นว่ามันใช้งานได้ไม่ยาก เราทำการคำนวณพื้นฐานทางคณิตศาสตร์ โดยที่ไม่จำเป็นต้องกำหนด Function อย่างเต็มรูปแบบ นี่เป็นหนึ่งใน Feature ที่มีอยู่มากมายของ Python ที่ทำให้มันเป็นภาษา Programming ที่ Clean และใช้งานง่าย

2. Maps

Map() เป็น Built-in Function ในภาษา Python ที่ใช้สำหรับการประยุกต์ใช้งาน Function กับ Sequence ของ Elements อย่าง List หรือ Dictionary มันเป็นวิธีที่ Clean และสำคัญที่สุดในเรื่องของ Readable สำหรับการ Operation:

ลองดูตัวอย่างจากด้านบน เราสามารถประยุกต์ใช้ Function ของเรากับ Single List หรือ Multiple Lists ก็ได้ หากคุณต้องเจอกับสิ่งเหล่านี้ คุณสามารถใช้ Map กับ Python Function ใด ๆ ก็ตามที่คุณนึกออก ตราบใดที่มันเข้ากันได้กับ Sequence Elements ที่คุณกำลังใช้งานอยู่

3. Filtering

Filter Built-in Function ค่อนข้างคล้ายกับ Map Function ซึ่งจะประยุกต์ใช้ Function กับ Sequence (List, Tuple, Dictionary) แต่จุดแตกต่างที่สำคัญ ก็คือ Filter() จะทำการ Return Elements ที่ Function ที่ใช้งาน Return เป็นค่า True เท่านั้น  

ลองดูตัวอย่างประกอบที่ด้านล่างนี้:

ไม่เพียง แต่เราจะประเมินว่าเป็น True หรือ False สำหรับแต่ละ List Element แต่ Filter() Function ยังจะทำให้แน่ใจว่า มันจะ Return Element ที่เป็นค่า True เท่านั้น มันค่อนข้างสะดวกมากในการจัดการกับ 2 ขั้นตอนของการตรวจสอบ นิพจน์ (Expression) และการสร้าง Return List 

4. Itertools

Python Itertools Module เป็นชุดของ Tools สำหรับการจัดการกับ Iterator ซึ่ง Iterator เป็น Data Type ที่สามารถใช้สำหรับ  For Loop ซึ่งรวมถึง List, Tuple และ Dictionary 

การใช้ Function ใน Itertools Module จะช่วยให้คุณสามารถ Perform ได้หลาย Iterator Operations ซึ่งปกติแล้วจะต้องใช้ Multi-Line Functions และ List Comprehension ที่มีความซับซ้อน 

ลองดูตัวอย่างด้านล่างที่แสดงให้เห็นถึงการใช้ Itertools:

 

5. Generators

Generator Functions ช่วยให้คุณสามารถประกาศ Function ที่ทำตัวเหมือนอย่าง Iterator ได้ เช่น สามารถใช้ใน For Loop ได้ ซึ่งวิธีนี้จะช่วยลดความยุ่งยากใน Code ของคุณ และมีประสิทธิภาพใน Memory มากขึ้นกว่าการใช้ For Loop ทั่วไป

ลองมาดูตัวอย่างกัน เช่น กรณีที่เราต้องการรวมค่าจากจำนวน 1 ถึง 1,000 โดยใน Part แรกของ Code ด้านล่าง จะแสดงให้เห็นถึงวิธีการใช้ For Loop ในการรวมค่าดังกล่าว

จะเห็นว่ามันก็สามารถใช้งานได้ดีในกรณีที่ List มีขนาดเล็ก ๆ อย่างในกรณีนี้คือ 1 ถึง 1,000 แต่ปัญหาจะเกิดขึ้นเมื่อคุณต้องการทำแบบเดียวกันนี้ ด้วย List ที่มีขนาดใหญ่ เช่น 1 ถึง 1 พันล้าน หากคุณใช้ For Loop แล้ว List ขนาดใหญ่ที่กิน Memory มหาศาลจะถูกสร้างขึ้นใน Memory และเชื่อว่า คงไม่ใช่ทุกคนที่มี Ram ขนาดใหญ่มหาศาลเพื่อเก็บสิ่งนี้ และ range() Function ใน Python ก็สามารถใช้ทำสิ่งนี้ได้ คือ มันจะสร้าง List ใน Memory 
ใน Part ที่ 2 ของ Code แสดงให้เห็นถึงการรวมค่าใน List โดยใช้ Python Generator โดย Generator จะสร้าง Element และเก็บไว้ใน Memory เท่าที่มันจะใช้เท่านั้น นั่นหมายความว่า ถ้าคุณต้องสร้างตัวเลข 1 พันล้านที่เป็น Floating Point Numbers คุณจะต้องเก็บไว้ใน Memory ไปทีละจำนวน ซึ่ง xrange() Function ใน Python จะใช้ Generators เพื่อสร้าง List 

หากคุณมี range ที่มีขนาดใหญ่และคุณต้องการจะสร้าง List ให้พวกมัน ให้คุณใช้ Generator หรือ xrange() Function เพราะมันมีผลเป็นอย่างยิ่งโดยเฉพาะถ้าคุณมีระบบที่มีข้อจำกัดในเรื่อง Memory เช่น Mobile 

ดังที่กล่าวไว้ข้างต้น หากคุณต้องการ Iterate ใน List หลาย ๆ ครั้งและมันมีขนาดเล็กพอเหมาะกับ Memory มันจะดีกว่าถ้าใช้ For Loop และ range() Function นั่นเป็นเพราะ Generators และ xrange จะสร้าง List Values ใหม่ ทุกครั้งที่คุณเข้าถึงพวกมัน ในขณะที่ range นั้นเป็น Static List และ Integers (จำนวนเต็ม) ก็มีอยู่แล้วใน Memory เพื่อการเข้าถึงที่รวดเร็วนั่นเอง 

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด