7 Python Function Things I Regret Not Knowing Earlier

16-Oct-24

คัมภีร์เทพ IT

See the original english version Click here!

 

ปัจจุบัน Python เป็นภาษาที่ได้รับความนิยมมากขึ้นเรื่อย ๆ และถูกนำไปใช้ในงานประเภทต่าง ๆ ในหลากหลายรูปแบบ และในบทความนี้จะกล่าวถึง 7 เรื่องเกี่ยวกับ Python Function ที่คุณควรจะเรียนรู้ไว้

1. Type hinting ใน Functions

เชื่อว่า Developers หลายคนที่กำลังเรียนรู้ Python อาจไม่เคยใช้ Type Hint เลย แต่มันมีประโยชน์ต่อการทำงานของคุณ

ตัวอย่างง่าย ๆ เช่น ถ้าเราต้องการเขียน Function ที่หาค่าเฉลี่ยของตัวเลขสองจำนวน เราอาจจะเขียนง่าย ๆ แบบนี้:

แต่เมื่อเราเขียน Functions โดยเพิ่ม Type Hint และ Docstring เข้าไป จะเป็นแบบนี้:

  • a: int หมายความว่า a ควรจะเป็นตัวเลขจำนวนเต็ม
  • b: int หมายความว่า b ควรจะเป็นตัวเลขจำนวนเต็ม
  • -> float หมายความว่า Function ควรจะ Return กลับมาเป็นค่าทศนิยม

อย่างไรก็ตาม ให้คิดไว้เสมอว่า Type Hint เป็นเพียงคำแนะนำ และไม่ได้เป็นการบังคับใช้ หากเราส่ง String หรือ Data Types อื่นเข้าไปใน a และ b ตัว Python จะไม่แจ้งเตือนใด ๆ จนกว่าจะมีการคำนวณที่ไม่ถูกต้อง เช่น การหาร String ด้วย 2 เป็นต้น

จุดประสงค์ของ Type Hint คือ 1) ทำให้มนุษย์สามารถอ่าน Code ได้ง่ายขึ้น 2) ช่วยให้ IDE เช่น PyCharm หรือ VSCode ทำการตรวจสอบ Code ให้เราได้

หากเป็นไปได้ พยายามใส่ Type Hint ลงไปใน Function เพื่อให้ Developers คนอื่น (หรือแม้กระทั่งตัวคุณเองในอนาคต) สามารถเข้าใจ Code ได้ง่ายขึ้น

2. Default Arguments

ในตัวอย่าง Function ข้างบน greeting=‘hi’ คือ Default Argument

  • ถ้าเราไม่ส่งค่าใด ๆ ให้ greeting ค่านั้นจะถูกกำหนดให้เป็น ‘hi’ โดยอัตโนมัติ
  • ถ้าเราส่งค่าบางอย่างให้ greeting ค่าที่ส่งเข้าไปจะถูกใช้แทนค่าเริ่มต้น

ใน greet('tom') เราไม่ส่งค่าใด ๆ เข้าไปใน greeting ดังนั้น มันจะใช้ค่าเริ่มต้น ‘hi’

ใน greet('tom', greeting=‘hello’) เราส่งค่า ‘hello’ เข้าไปที่ greeting หมายความว่า เราแทนที่ Default Argument และมีการกำหนดค่า greeting = 'hello'

สิ่งนี้มีประโยชน์เมื่อ Function มี Parameters จำนวนมาก และเราไม่ต้องการส่งทุก Parameters ทุกครั้งที่เรียกใช้ Function

3. Arguments VS Parameters

หลายคนอาจคิดว่า ทั้งสองอย่างนี้ หมายถึง สิ่งเดียวกัน

แต่จริง ๆ แล้ว มันมีความแตกต่างกันเล็กน้อย

สมมติว่า เรามี Function ที่รับค่า (a, b) และจะ Return เป็นค่าเฉลี่ยของพวกมันกลับมาให้:

Parameters คือ ตัวแปรที่เขียนไว้ในวงเล็บตอนที่เรากำหนด Function ในที่นี้ a และ b คือ Parameters

Argument คือ ค่าที่เราส่งเข้าไปใน Function ตอนที่เรียกใช้ ในที่นี้เมื่อเราเรียก avg(3, 5) ค่า 3 และ 5 ก็คือ Arguments

4. Positional VS Keyword Arguments

ลองดูตัวอย่าง Function ง่าย ๆ ต่อไปนี้:

คราวนี้ มาลองเรียกใช้ Function โดยการส่ง Positional Arguments กันดู:

ในตัวอย่างนี้ 4 และ 7 ก็คือ Positional Arguments ซึ่งต้องส่งตามลำดับที่ถูกต้อง — 4 จะถูกส่งให้ และ 7 จะถูกส่งให้ b

ต่อมา ทำการเรียกใช้ Function โดยการส่ง Keyword Arguments: 

ในตัวอย่างนี้ b=5 และ a=8 คือ Keyword Arguments ซึ่ง Keyword Arguments ไม่จำเป็นต้องเรียงลำดับ แต่ต้องส่งในรูปแบบของ key=value

5. Arbitrary Positional Arguments (*args)

Arbitrary Positional Arguments ใน Function หรือที่เรียกว่า *args จะช่วยให้ Function สามารถรับ Positional Arguments ได้แบบไม่จำกัดจำนวน

ในตัวอย่างนี้ Test Function รับ *args ซึ่งทำให้ Test สามารถ Positional Arguments ได้หลายค่า โดยค่าทั้งหมดจะถูกเก็บใน tuple ที่ชื่อ args

เราสามารถใช้ *args ร่วมกับ Parameters ปกติได้ (แต่ *args ต้องอยู่หลัง Parameters ปกติ)

หมายเหตุ: เราไม่จำเป็นต้องตั้งชื่อว่า *args เสมอไป เราสามารถตั้งชื่อเป็นอะไรก็ได้ แต่ต้องมีเครื่องหมาย * นำหน้า

6. Arbitrary Keyword Arguments (**kwargs)

Arbitrary Keyword Arguments หรือที่เรียกว่า **kwargs จะช่วยให้ Function สามารถรับ Keyword Arguments ได้แบบไม่จำกัดจำนวน

ในตัวอย่างนี้ Test Function รับ **kwargs ซึ่งจะช่วยทำให้เราสามารถรับ Keyword Arguments ได้หลายค่า โดยค่าทั้งหมดจะถูกเก็บใน Dictionary ที่ชื่อ kwargs

เราสามารถใช้ **kwargs ร่วมกับ Parameters ปกติได้ (แต่ **kwargs ต้องอยู่หลัง Parameters ปกติ) 

หมายเหตุ: เราไม่จำเป็นต้องตั้งชื่อว่า **kwargs เสมอไป เราสามารถตั้งชื่อเป็นอะไรก็ได้ แต่ต้องมี ** นำหน้า

7. การใช้ * และ ** เพื่อส่ง List/Dict ไปยัง Function

นี่เป็นตัวอย่างของ Function ที่พิมพ์ค่า Arguments ออกมา: 

แทนที่จะเรียกใช้ Arguments แบบปกติ เช่น hi(1, 2) เราสามารถ:

  • ใช้ * เพื่อส่ง List ที่มี Positional Arguments  

ในตัวอย่างนี้ เครื่องหมาย * ที่อยู่หน้าตัวแปร nums จะ Unpack ค่าใน List และส่งเข้าไปใน Function เป็น Positional Arguments ซึ่งก็เหมือนกับการเรียก hi(100, 200)

  • ใช้ ** เพื่อส่ง Dict ที่มี Keyword Arguments

ในตัวอย่างนี้ เครื่องหมาย ** ที่อยู่หน้าตัวแปร d จะ Unpack ค่า key-value และส่งเข้าไปใน Function เป็น Keyword Arguments ซึ่งก็เหมือนกับการเรียก hi(a=100, b=200)

สรุป

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

ที่มา: https://levelup.gitconnected.com/

 

 

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

 

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

เพิ่มเพื่อน

 

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