เมื่อเรากำหนดฟังก์ชันในโปรแกรม Python วัตถุประสงค์คือรันโค้ดซ้ำๆ โดยส่งค่าต่างๆ ให้อาร์กิวเมนต์ของฟังก์ชัน ความท้าทายหนึ่งในการออกแบบนี้คือ ถ้าเราไม่แน่ใจว่าต้องการประมวลผลอาร์กิวเมนต์กี่ตัวทุกครั้งที่เรียกฟังก์ชัน นี่คือที่มาของอาร์กิวเมนต์พิเศษที่เรียกว่า *args และ **kwargs มาดูทีละอย่าง
*args
*args ช่วยให้เราใช้จำนวนอาร์กิวเมนต์ที่เปลี่ยนแปลงได้เป็นอินพุตของฟังก์ชัน ในตัวอย่างด้านล่าง เราหาผลคูณของชุดตัวเลข จำนวนตัวเลขเหล่านี้เปลี่ยนแปลงทุกครั้งที่เราเรียกฟังก์ชัน
ตัวอย่างโค้ด
def findproduct(*many_nums):
result = 1
for num in many_nums:
result = result * num
print("Multiplication result:", result)
findproduct(3, 9)
findproduct(2, 11, 10)
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ -
Multiplication result: 27 Multiplication result: 220
**kwargs
ต่อมา มีสถานการณ์ที่เราต้องการส่ง keyword arguments ซึ่งก็คือคู่ key-value เป็นอาร์กิวเมนต์ให้ฟังก์ชัน
ที่นี่เราสามารถส่ง keyword arguments จำนวนที่เปลี่ยนแปลงได้ให้ฟังก์ชัน อาร์กิวเมนต์แบบนี้ชื่อว่า **kwargs โปรดสังเกตว่ามี asterisk สองตัวเมื่อใช้อาร์กิวเมนต์แบบนี้ ในความเป็นจริง keyword arguments เหล่านี้ถูกส่งให้โปรแกรมเป็น Python dictionary ที่เก็บคู่ key-value หลายคู่
ตัวอย่างโค้ด
def country_details(**state_info):
print('\n\n')
for k, v in state_info.items():
print("{} is {}".format(k, v))
country_details(StateName="Telangana", Capital="Hyderabad", Population=3400000)
country_details(StateName="Andhra Pradesh", Capital="Amaravati", Population=1000000, ForestCoverage="30%")
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ -
StateName is Telangana Population is 3400000 Capital is Hyderabad StateName is Andhra Pradesh Population is 1000000 ForestCoverage is 30% Capital is Amaravati