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