8 เคล็ดลับ Python ขั้น Advanced ที่ Programmers มืออาชีพใช้

14-ต.ค.-20

คัมภีร์เทพ IT

บทความนี้เป็น 8 เคล็ดลับ Python ขั้น Advanced ที่ Programmers มืออาชีพใช้ เชื่อว่าคงมีบางเคล็ดลับที่คุณอาจไม่เคยทราบมาก่อน ลองนำเคล็ดลับเหล่านี้ไปใช้ใน Python Code ของคุณดู เพื่อให้ Code มีความกระชับและมีประสิทธิภาพมากยิ่งขึ้น

1. การ Sort Objects โดยใช้ Multiple Keys

สมมติว่า เราต้องการ Sort List ของ Dictionaries ต่อไปนี้:

แต่เราไม่เพียงต้องการ Sort แค่ตาม ชื่อ หรือ อายุ เพียง Field ใด Field หนึ่ง แต่เราต้องการ Sort โดยใช้ทั้ง 2 Fields ซึ่งใน SQL จะมี Query ดังต่อไปนี้:

อันที่จริงก็มี Solution ง่าย ๆ สำหรับปัญหาดังกล่าว ต้องขอบคุณการรับประกันของ Python ที่ว่า Sort Functions จะมีลำดับการ Sort ที่ Stable ซึ่งนั่นหมายความว่า Item ที่มีการเปรียบเทียบในระดับเดียวกัน จะมีการคงลำดับเดิมเอาไว้

ในการ Sort ตาม ชื่อ และ อายุ เราสามารถทำได้ดังนี้:

จากด้านบน จะสังเกตได้ว่า ขั้นแรก เราจะ Sort ตามอายุก่อน จากนั้นก็ Sort ตามชื่อ และด้วย operator.itemgetter() เราจะได้รับ Field ของ ชื่อ และ อายุ จากแต่ละ Dictionary ภายใน List ด้วยวิธีที่สั้นกระชับ

สิ่งนี้จะทำให้เรา ได้ผลลัพธ์ตามที่ต้องการ:

จากผลลัพธ์ด้านบน จะเห็นว่าจะมีการเรียงลำดับตามชื่อก่อน และกรณีที่ชื่อเหมือนกันก็จะมีการเรียงตามลำดับของอายุด้วย ดังนั้น คนที่ชื่อ John จึงถูกจัดเรียงให้อยู่ติดกันเป็นกลุ่ม แต่มีการเรียงตามลำดับอายุ

2. List Comprehensions

List Comprehension สามารถใช้แทนที่ For Loops ที่ใช้ในการเติม Item ใน List ได้ สำหรับ Syntax พื้นฐานของ List Comprehension ก็คือ:

นี่คือตัวอย่างง่าย ๆ ของการเติม List ด้วยลำดับของตัวเลข:

และเนื่องจาก คุณสามารถใช้ Expression คุณจึงสามารถใช้การคำนวณทางคณิตศาสตร์ได้:

หรือแม้แต่การเรียกใช้ External Function:

และสุดท้าย คุณสามารถใช้ "if" เพื่อทำการ Filter ตัว List ในกรณีนี้เราจะเก็บเฉพาะค่าที่หารด้วย 2 ลงตัว เท่านั้น:

3. ตรวจสอบ Memory Usage ของ Objects

ด้วย sys.getsizeof() จะช่วยให้คุณสามารถตรวจสอบการใช้ Memory ของ Object:

จากด้านบน มันทำให้เกิดคำถามว่า ทำไม List ขนาดใหญ่นี้ถึงมีขนาดเพียงแค่ 48 Bytes

นั่นเป็นเพราะ Range Function จะ Return Class ที่ทำหน้าที่เหมือน List เท่านั้น ซึ่ง Range นี้เป็น Memory ที่มีประสิทธิภาพมากกว่าการใช้ Actual List ของตัวเลข

คุณสามารถพิสูจน์ได้ด้วยตัวคุณเอง โดยใช้ List Comprehension สร้าง Actual List ของตัวเลข โดยใช้ Range เดียวกัน:

ถ้าคุณได้ลองใช้และเรียนรู้ sys.getsizeof() จะทำให้คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Python และการใช้ Memory ได้มากขึ้น

4. Data Classes

ตั้งแต่เวอร์ชัน 3.7 เป็นต้นไป Python ก็เริ่มมี Data Classes ซึ่งมีข้อดีหลายอย่างเหนือ Regular Classes หรือทางเลือกอื่น ๆ เช่น การ Return ค่าหลาย ๆ ค่า หรือ Dictionaries:

  • Data Class จะใช้ Code เพียงเล็กน้อยเท่านั้น
  • คุณสามารถเปรียบเทียบ Data Class ได้เนื่องจาก __eq__ จะถูก Implement สำหรับคุณ
  • คุณสามารถ Print Data Class สำหรับการ Debug ได้อย่างง่ายดาย เนื่องจากมี __repr__ จะถูก Implement เช่นกัน
  • Data Class ต้องการ Type Hints เพื่อลดโอกาสของการเกิด Bug

นี่คือตัวอย่าง การใช้งาน Data Class:

คุณสามารถดูรายละเอียดในเชิงลึกได้ ที่นี่

5. attrs Package

แทนที่จะใช้ Data Class คุณสามารถใช้ attrs ได้ มี 2 เหตุผลในการเลือกใช้ attrs:

  • คุณกำลังใช้ Python ที่เก่ากว่า Version 3.7
  • คุณต้องการ Features เพิ่มเติม

attrs Package รองรับ Python ใน Version หลักทั้งหมดรวมถึง CPython 2.7 และ PyPy สิ่งที่ attrs มีให้มากกว่า Data Class ทั่วไป ก็คือ Validators และ Converters

อยากให้คุณลองมาดูตัวอย่าง Code ต่อไปนี้:

ในความเป็นจริง ผู้สร้าง attrs ได้ทำงานกับ PEP ที่แนะนำ Data Classes ซึ่งจากความตั้งใจแล้ว Data Class ถูกทำให้ง่ายขึ้น (เข้าใจได้ง่ายกว่า) ในขณะที่ attrs จะนำเสนอ Features ที่หลากหลายที่คุณอาจต้องการใช้

หากคุณต้องการดูตัวอย่างเพิ่มเติมอื่น ๆ ก็สามารถดูที่ attrs examples page

6. การ Merge Dictionaries (Python 3.5+)

ตั้งแต่ Python 3.5 การรวม Dictionaries เป็นสิ่งที่ทำได้ง่ายขึ้นกว่าเดิม:

หากมี Keys ที่ทับซ้อนกัน Keys จาก Dictionary แรก ก็จะถูก Overwrite

ใน Python 3.9 การรวม Dictionaries จะยิ่ง Clean มากขึ้น ซึ่งจากการ Merge ในตัวอย่างข้างต้น สามารถเขียนใหม่ใน Python 3.9 ได้ดังนี้:

7. การหาค่าที่ปรากฏบ่อยที่สุด

หากคุณต้องการหาว่า มีค่าใดที่ปรากฏบ่อยที่สุดใน List หรือ String สามารถทำได้ตามตัวอย่างนี้:

คุณอาจสงสัยว่า ทำไมวิธีนี้ถึงได้ผล ลองอ่านรายละเอียดต่อไปนี้ดู:

  • max() จะ Return ค่าที่สูงสุดใน List ออกมา ซึ่ง key Argument จะใช้ Argument Function ในการ Customize ลำดับการ Sort ซึ่งในกรณีนี้ก็คือ test.count นั่นเอง Function นี้จะถูกใช้กับแต่ละ Item ผ่านการทำซ้ำ ๆ
  • test.count เป็น Built-in Function ของ List มันต้องใช้ Argument และจะนับจำนวนครั้งที่เกิดขึ้นของ Argument นั้น ดังนั้น test.count(1) จะทำการ Return 2 กลับมาให้ และ test.count(4) จะ Return 4 กลับมาให้
  • set(test) จะ Return ค่าที่ไม่ซ้ำกันทั้งหมดจาก Test ซึ่งก็คือ {1, 2, 3, 4}

ดังนั้น สิ่งที่เราทำจาก Code ดังกล่าวก็คือ รับค่าที่ไม่ซ้ำกันทั้งหมดของ Test ซึ่งก็คือ {1, 2, 3, 4} จากนั้น max จะใช้ list.count Function กับพวกมัน และ Return ค่าสูงสุดกลับมาให้

แต่อันที่จริง ยังมีวิธีที่มีประสิทธิภาพมากกว่าวิธีด้านบน:

8. การ Return หลาย ๆ ค่า

Function ใน Python สามารถ Return ตัวแปรได้มากกว่า 1 ตัวแปร โดยไม่จำเป็นต้องใช้ Dictionary, List หรือ Class

มันมีการทำงานดังต่อไปนี้:

ที่มา:  https://towardsdatascience.com/

 

 

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

 

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

เพิ่มเพื่อน

 

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