วิธีการใช้งาน *args กับ **kwargs ใน Python กัน

ได้ลองเข้ามาทำความรู้จักกับภาษา Python ได้ซักพักนึง ก็ยังพองูๆ ปลาๆ อยู่ เอาความรู้เกี่ยวกับ argument ของ function ใน Python มาฝากกัน หลายๆ คนที่กำลังเริ่มเขียน Python จะเห็นอยู่บ่อยๆ เลยก็คือ *args กับ **kwargs เดี๋ยวเราจะมาทำความรู้จักว่าเจ้าสองตัวนี้มันคืออะไร และมีวิธีการใช้งานยังไง

จริงๆ แล้วเราไม่จำเป็นต้องเขียน *args หรือ **kwargs แต่สิ่งที่จำเป็นจริงๆ คือ * ส่วน args หรือ kwargs จะเป็นอะไรก็ได้ เช่น *var หรือ **vars แบบนี้ก็ได้ครับ ทั้ง *args และ **kwargs ถูกนำมาใช้กับฟังก์ชัน เพื่อรับ input จากผู้ใช้ฟังก์ชันในกรณีที่เราไม่รู้ว่าผู้ใช้ของเราจะส่ง input เข้ามากี่ค่า

วิธีใช้งาน *args
*args ใช้เพื่อส่ง input ของผู้ใช้เข้ามาแบบไม่มีชื่อตัวแปรกำกับ (non-keyworded) ดูตัวอย่างกันดีกว่าจะได้เข้าใจกันมากขึ้นครับ

def test_var_args(f_arg, *args):
    print "first normal arg:", f_arg
    for arg in args:
        print "another arg through *args :", arg

test_var_args('หนึ่ง','สอง','สาม','สี่')

ผลลัพธ์ที่ได้ก็จะเป็น

first normal arg: หนึ่ง
another arg through *args : สอง
another arg through *args : สาม
another arg through *args : สี่

น่าจะเข้าใจกันมากขึ้นนะครับเกี่ยวกับ *args ต่อไปก็ถึงคิวของ **kwargs กันบ้างครับ

วิธีใช้งาน **kwargs
**kwargs ใช้เพื่อส่ง input โดยมีการตั้งชื่อให้ด้วย (keyworded) **kwargs จะเหมาะมากถ้าเราต้องการใช้งาน input ที่ส่งเข้ามาในฟังก์ชันด้วยชื่อที่ส่งเข้ามา จะได้จำกันง่ายๆ ว่างั้นเถอะ ^^ ตัวอย่างๆ

def greet_me(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.iteritems():
            print "%s == %s" %(key,value)

>>> greet_me(web="imooh.com")
web == imooh.com

ถ้าเราต้องการส่ง input ทั้งสามรูปแบบ (args, *args, **kwargs) ก็สามารถใช้ได้ครับ โดยเรียงลำดับ ประมาณนี้ครับ

some_func(arg, *args, **kwargs)

สำหรับใครที่ยังสงสัยอยู่อ่านเพิ่มเติมได้ที่นี่ครับ
*args and **kwargs in python explained
– python docs on defining functions