Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

*args และ **kwargs ใน Python


เมื่อเรากำหนดฟังก์ชันในโปรแกรม 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