ฟังก์ชันในภาษาไพธอน
บทความนี้อธิบายเกี่ยวกับฟังก์ชันในภาษาไพธอน
YouTube Video
ฟังก์ชันในภาษาไพธอน
ฟังก์ชันในภาษาไพธอนเป็นคุณสมบัติที่สำคัญสำหรับการกำหนดบล็อกโค้ดที่ใช้ซ้ำได้ ช่วยให้คุณสามารถจัดระเบียบและลดความซับซ้อนของโปรแกรมของคุณโดยการเรียกใช้ตามความต้องการ การใช้ฟังก์ชันสามารถช่วยปรับปรุงความสามารถในการอ่านโค้ด และเป็นไปตามหลักการ DRY (Don't Repeat Yourself, หลีกเลี่ยงการเขียนโค้ดซ้ำซ้อน)
การกำหนดฟังก์ชัน
ฟังก์ชันถูกกำหนดโดยการใช้คำสั่ง def
ไวยากรณ์พื้นฐานมีดังนี้:
1def function_name(arg1, arg2, ..., argN):
2 """docstring (A brief description of the function)"""
3 processing
4 return return_value
ยกตัวอย่างเช่น เพื่อกำหนดฟังก์ชันที่บวกตัวเลขสองตัว คุณสามารถเขียนดังนี้:
1def add(x, y):
2 """A function that adds two numbers and returns the result"""
3 return x + y
การเรียกใช้งานฟังก์ชัน
ฟังก์ชันที่กำหนดไว้สามารถเรียกใช้งานได้ดังนี้:
1result = add(3, 4)
2print(result) # Output: 7
ส่วนประกอบของฟังก์ชัน
-
ชื่อฟังก์ชัน: ชื่อของฟังก์ชัน ใช้สำหรับการเรียกใช้
-
อาร์กิวเมนต์ (พารามิเตอร์): ชื่อของตัวแปรที่ใช้รับข้อมูลที่ส่งเข้ามาในระหว่างการเรียกใช้ คุณสามารถกำหนดอาร์กิวเมนต์ได้ตั้งแต่ 0 ตัวหรือมากกว่านั้น
-
สตริงเอกสาร (Docstring): สตริงที่ใช้เพื่ออธิบายวัตถุประสงค์และการใช้งานของฟังก์ชัน ไม่บังคับ
-
เนื้อหาฟังก์ชัน: บล็อกคำสั่งแบบย่อหน้า ที่ใช้สำหรับเขียนคำสั่งที่ฟังก์ชันจะดำเนินการ
-
ค่าที่ส่งกลับ: ค่าที่ส่งกลับให้กับผู้เรียกใช้งานโดยใช้คำสั่ง
return
หากไม่มีการใช้คำสั่งreturn
จะส่งกลับค่าNone
โดยค่าเริ่มต้น
ประเภทของอาร์กิวเมนต์
ในภาษาไพธอน มีอาร์กิวเมนต์หลายประเภท
- อาร์กิวเมนต์แบบระบุตำแหน่ง: วิธีมาตรฐานในการส่งอาร์กิวเมนต์เข้าสู่ฟังก์ชัน
- อาร์กิวเมนต์แบบกำหนดค่าเริ่มต้น: อาร์กิวเมนต์ที่มีค่าเริ่มต้นซึ่งสามารถละเว้นได้ระหว่างการเรียกใช้
1def greet(name, message="Hello"):
2 print(f"{message}, {name}")
3
4greet("Alice") # "Hello, Alice"
5greet("Bob", "Good morning") # "Good morning, Bob"
- อาร์กิวเมนต์ความยาวไม่แน่นอน:
*args
สำหรับรับอาร์กิวเมนต์เชิงตำแหน่งหลายตัวในรูปแบบทูเพิล และ**kwargs
สำหรับรับอาร์กิวเมนต์ในรูปแบบดิกชันนารี
1def func(*args, **kwargs):
2 print("args:", args)
3 print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}
การใช้งานฟังก์ชันอย่างถูกต้องจะช่วยให้คุณเขียนโปรแกรม Python ได้อย่างมีประสิทธิภาพและประสิทธิผลมากขึ้น
ฟังก์ชัน Lambda ใน Python
ใน Python ฟังก์ชัน lambda
ใช้สำหรับกำหนดฟังก์ชันแบบไม่มีชื่อและกระชับ ต่างจากฟังก์ชันที่กำหนดด้วยคีย์เวิร์ด def
ปกติ lambda
ช่วยให้คุณสร้างฟังก์ชันสั้นที่มีเพียงบรรทัดเดียว ที่นี่เราจะอธิบายฟังก์ชัน lambda
ใน Python อย่างละเอียด
พื้นฐานเกี่ยวกับฟังก์ชัน lambda
ฟังก์ชัน lambda
หรือที่เรียกว่าฟังก์ชันไม่มีชื่อ ใช้เพื่อกำหนดฟังก์ชันชั่วคราวที่ไม่มีชื่อ ตามชื่อที่ระบุ ไวยากรณ์พื้นฐานมีดังนี้:
1lambda arguments: expression
arguments
: ระบุอาร์กิวเมนต์ของฟังก์ชัน สามารถระบุอาร์กิวเมนต์หลายตัวโดยใช้เครื่องหมายจุลภาคคั่นexpression
: เป็นนิพจน์ที่ถูกประมวลผลโดยอ้างอิงจากอาร์กิวเมนต์ ผลลัพธ์ของนิพจน์จะกลายเป็นค่าที่ฟังก์ชันส่งกลับ
ตัวอย่างเช่น โค้ดต่อไปนี้กำหนดและเรียกใช้ฟังก์ชัน lambda
ที่ใช้บวกเลขสองตัว
1add = lambda x, y: x + y
2print(add(5, 3)) # Output: 8
ในตัวอย่างนี้ lambda x, y: x + y
เป็นฟังก์ชัน lambda
ที่รับอาร์กิวเมนต์สองตัว x
และ y
และคืนผลรวมของมัน
กรณีการใช้งานฟังก์ชัน lambda
ฟังก์ชัน lambda
มีประโยชน์ในสถานการณ์ที่คุณต้องการกำหนดฟังก์ชันง่ายๆ ทันที พวกมันมักใช้ในกรณีต่อไปนี้:
-
เมื่อส่งเป็นอาร์กิวเมนต์ให้กับฟังก์ชัน
- มันมีประโยชน์ในฟังก์ชันลำดับสูง (ฟังก์ชันที่รับฟังก์ชันอื่นเป็นอาร์กิวเมนต์) เมื่อส่งผ่านฟังก์ชันสั้น ๆ ชั่วคราว
-
เมื่อกำหนดลำดับคีย์สำหรับการจัดเรียงลิสต์
- ฟังก์ชันเหล่านี้มีประโยชน์สำหรับการกำหนดเกณฑ์การจัดเรียง (คีย์) ในฟังก์ชันเช่น
sort()
หรือsorted()
- ฟังก์ชันเหล่านี้มีประโยชน์สำหรับการกำหนดเกณฑ์การจัดเรียง (คีย์) ในฟังก์ชันเช่น
ตัวอย่างการใช้งานในฟังก์ชันระดับสูง
ตัวอย่างทั่วไปของฟังก์ชันระดับสูง ได้แก่ map()
, filter()
และ reduce()
ฟังก์ชันเหล่านี้รับฟังก์ชันอื่นเป็นอาร์กิวเมนต์และนำไปใช้กับลำดับ เช่น ลิสต์
1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared) # Output: [1, 4, 9, 16, 25]
ในตัวอย่างนี้ ฟังก์ชัน lambda
ถูกส่งไปยังฟังก์ชัน map()
เพื่อยกกำลังสองแต่ละตัวเลขในลิสต์
ตัวอย่างการใช้งานการจัดเรียงรายการ
ฟังก์ชัน lambda
สามารถใช้กำหนดคีย์แบบกำหนดเองเมื่อต้องการจัดเรียงรายการ ตัวอย่างเช่น โค้ดต่อไปนี้จัดเรียงรายการที่มี tuple ตามองค์ประกอบที่สอง
1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
ในตัวอย่างนี้ ฟังก์ชัน lambda
ถูกใช้ในการจัดเรียง tuple ตามองค์ประกอบที่สอง (ซึ่งเป็นสตริง)
filter()
และ lambda
ฟังก์ชัน filter()
ใช้สำหรับกรององค์ประกอบในรายการ (หรือข้อมูล iterable อื่นๆ) โดยอ้างอิงตามเงื่อนไขที่กำหนด
1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers) # Output: [2, 4, 6, 8]
ในตัวอย่างนี้ ตัวเลขคู่ในรายการจะถูกกรองเพื่อสร้างรายการใหม่
lambda
และ reduce()
ฟังก์ชัน reduce()
ใช้สำหรับลดรายการให้เป็นค่าหนึ่งค่า สามารถนำไปใช้งานได้ง่ายด้วยการใช้ฟังก์ชัน lambda
1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product) # Output: 120
ในตัวอย่างนี้ องค์ประกอบทั้งหมดในรายการจะถูกคูณเข้าด้วยกันเพื่อสร้างผลลัพธ์
หลีกเลี่ยงการใช้ฟังก์ชัน lambda
ที่ซับซ้อน
ข้อได้เปรียบของฟังก์ชัน lambda
คือความกระชับ แต่จะอ่านยากขึ้นเมื่อใช้งานเพื่อดำเนินตรรกะที่ซับซ้อน ดังนั้นจึงเหมาะที่จะใช้งานสำหรับการปฏิบัติการแบบง่ายที่สามารถเขียนได้ภายในบรรทัดเดียว สำหรับการปฏิบัติการที่ซับซ้อน การกำหนดฟังก์ชันด้วย def
จะอ่านง่ายกว่าและดูแลรักษาได้ดีกว่า
ตัวอย่างเช่น คุณควรหลีกเลี่ยงการใช้ฟังก์ชัน lambda
ที่ซับซ้อน เช่นตัวอย่างด้านล่าง
1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)
ในกรณีนี้ ควรใช้งานฟังก์ชันที่กำหนดด้วย def
ดังที่แสดงด้านล่าง
1def complex_func(x, y):
2 if x > y:
3 return x * 2 + y
4 else:
5 return x + y * 2
สรุป
ฟังก์ชัน lambda
ใน Python เป็นเครื่องมือที่มีประโยชน์สำหรับการกำหนดฟังก์ชันแบบชั่วคราวและกระชับ มักใช้งานในฟังก์ชันระดับสูงหรือการดำเนินการในรายการเพื่อกำหนดเงื่อนไขเฉพาะอย่างกระชับ อย่างไรก็ตาม ฟังก์ชัน lambda
ควรจำกัดการใช้งานสำหรับงานง่าย โดยใช้ฟังก์ชัน def
ในการดำเนินตรรกะที่ซับซ้อน
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย