ในบางกรณี จำนวนของพารามิเตอร์ที่เราส่งเข้าไปในฟังก์ชันอาจมีจำนวนที่ไม่แน่นอน ขึ้นอยู่กับข้อมูลที่มีอยู่เช่น ฟังก์ชันในการหาผลรวมของชุดตัวเลข แต่จำนวนตัวเลขในแต่ละชุดอาจมีไม่เท่ากัน ดังนั้น จึงมีการกำหนดพารามิเตอร์อีกรูปแบบหนึ่ง ซึ่งเรียกว่า Variadic Parameter โดยพารามิเตอร์นี้จะเก็บข้อมูลตัวแปรเป็นแบบทูเพิล และในบทความนี้เราจะมาพูดถึงลักษณะและการใช้งานของ Variadic Parameter ในภาษาไพทอนกัน

     Parameter (พารามิเตอร์) คือข้อมูลที่รับจากภายนอกเข้ามาใช้งานฟังก์ชันต่างๆ โดยฟังก์ชันจะประมวลผลไปตามพารามิเตอร์ที่ได้รับมา ซึ่งผลลัพธ์ที่ได้ก็จะแปรเปลี่ยนไปตามค่าของพารามิเตอร์ที่ส่งเข้ามานั่นเอง ดังนั้นพารามิเตอร์จึงช่วยให้ฟังก์ชันต่างๆทำงานได้อย่างหลากหลาย

Variadic Parameter

     Variadic Parameter คือ พารามิเตอร์ที่เราจะกำหนดค่าให้กับมันกี่จำนวนก็ได้ คล้ายกับตัวแปรแบบทูเพิล ที่สามารถเก็บข้อมูลได้มากกว่า 1 ค่า โดยมีลักษณะดังนี้

- ภายในฟังก์ชันเราจะสามารถเข้าถึงแต่ละค่าโดยใช้วิธีเดียวกับทูเพิล

- เมื่อเรียกใช้ฟังก์ชัน ก็กำหนดค่าให้กับมันตามจำนวนที่ต้องการ โดยคั่นแต่ละค่าด้วยเครื่องหมาย , แต่ห้ามมี Keyword Argument และไม่ควรสร้างเป็นทูเพิลหรือลิสต์ก่อนนำมากำหนดเป็นอากิวเมนต์ ไม่อย่างนั้นจะถูกมองว่าข้อมูลทั้งหมดเป็นรายการเดียวกัน

- ในฟังก์ชันสามารถมีทั้งพารามิเตอร์แบบปกติและแบบ Variadic ร่วมกันได้ แต่จะสามารถมี Variadic ได้เพียงอันเดียวเท่านั้น

     ส่วนวิธีในการสร้างพารามิเตอร์แบบนี้คือให้วางเครื่องหมาย * ไว้หน้าชื่อพารามิเตอร์ตั้วนั้น 

ตัวอย่าง

def product_list(brand, *products):
    print(f'{brand} ',end='')
    x = 'products: ' if len(products) > 1 else 'product :'
    x += ','.join(products)
    print(x)

product_list('Apple','iPhone','iPad','MacBook')
product_list('Google','Pixel')
product_list('Samsung','Galaxy A','Galaxy Note','Galaxy S','Galaxy J')

ผลลัพธ์

ผลลัพธ์ที่ได้จากตัวอย่าง
ผลลัพธ์จากตัวอย่าง

     ซึ่งถ้าหากเราไม่ได้วางเครื่องหมาย * ไว้หน้าพารามิเตอร์ก็จะเกิดเออเร่อขึ้น เนื่องจากขั้นตอนในการสร้างฟังก์ชันเรากำหนดไว้เพียงแค่สองตำแหน่งนั่นเอง และโดยทั่วไปแล้ว เรานิยมวาง Variadic Parameter ไว้ในลำดับสุดท้าย แต่หากวางในลำดับอื่น เมื่อเรียกใช้ฟังก์ชัน ต้องระบุคีย์เวิร์ดกำกับอาร์กิวเมนต์ ตัวที่เหลือเพื่อให้แยกแยะได้ เช่น

def product_list(*products, brand):
    print(f'{brand} ',end='')
    x = 'products: ' if len(products) > 1 else 'product :'
    x += ','.join(products)
    print(x)

product_list('iPhone','iPad','MacBook',brand='Apple')
product_list('Pixel',brand='Google')
product_list('Galaxy A','Galaxy Note','Galaxy S','Galaxy J',brand='Samsung')

     ซึ่งถ้าหากไม่ระบุ ก็เกิดเออเร่อขึ้น ทำให้การวาง Variadic Parameter ไว้ในลำดับสุดท้าย เป็นที่นิยมมากกว่า เพราะไม่ต้องมาระบุคีย์เวิร์ดกำกับอาร์กิวเมนต์ตัวที่เหลือ เพียงเท่านี้เราก็สามารถกำหนดค่าให้กับพารามิเตอร์กี่จำนวนก็ได้แล้ว ทำให้เราไม่จำเป็นต้องสร้างพารามิเตอร์ขึ้นมาหลายๆตัว ซึ่งเราเรียกลักษณะการทำงานนี้ว่า Variadic Parameter นั่นเอง

 

 

ช่องทางการศึกษาเพิ่มเติมเกี่ยวกับ : Python

Default Parameter พารามิเตอร์แบบมีค่าดีฟอลต์

Positional Argument ลำดับของอาร์กิวเมนต์ในไพทอน

การเรียกใช้ฟังก์ชันแบบ Recursion ในไพทอน ฟังชันก์ทำงานซ้ำเรียกตัวเอง

การใช้งานตัวแปรแบบ Global และ Local

การแยกและตัดช่องว่างข้อมูลชนิด String (สตริง) ในไพทอน

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ช่วยด้วยครับ ใส่path ให้ preg_split ทำไงดี...
โดย smile อ 11 ต.ค. 2009 7:24 am บอร์ด Programming - PHP
0
951
อ 11 ต.ค. 2009 7:24 am โดย smile View Topic ช่วยด้วยครับ ใส่path ให้ preg_split ทำไงดี...
ผมอัฟjoomlaเสร็จแล้วแต่insto แล้วทำฐานข้อมูล ที่ว่า ชื่อฐานข
โดย narupot ศ 09 ต.ค. 2009 8:52 pm บอร์ด สอบถามปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
1
719
ศ 09 ต.ค. 2009 11:12 pm โดย mindphp View Topic ผมอัฟjoomlaเสร็จแล้วแต่insto แล้วทำฐานข้อมูล ที่ว่า ชื่อฐานข
การแบ่งหน้า php ที่เป็น Thumbnails (columns และ row ) ครับ
โดย teekaiman พฤ 08 ต.ค. 2009 10:15 am บอร์ด Programming - PHP
4
2636
ศ 09 ต.ค. 2009 3:22 pm โดย teekaiman View Topic การแบ่งหน้า php ที่เป็น Thumbnails (columns  และ  row ) ครับ
รบกวนขอจาวาสคริปต์ textbox รับค่าภาษาอังกฤษกับตัวเลขทีจ้า
โดย SG14 พฤ 08 ต.ค. 2009 7:26 pm บอร์ด JavaScript & jQuery Ajax & Node.JS
1
2654
ศ 09 ต.ค. 2009 11:46 am โดย mindphp View Topic รบกวนขอจาวาสคริปต์  textbox รับค่าภาษาอังกฤษกับตัวเลขทีจ้า
ทำไมผมเช็คพาสเวิรดตอนสมัครไม่ได้อ่าครับ
โดย iamaj พฤ 08 ต.ค. 2009 9:06 pm บอร์ด JavaScript & jQuery Ajax & Node.JS
1
1729
ศ 09 ต.ค. 2009 11:44 am โดย mindphp View Topic ทำไมผมเช็คพาสเวิรดตอนสมัครไม่ได้อ่าครับ
Warning: mysql_num_rows(): supplied argument is not a valid
โดย Anonymous พฤ 08 ต.ค. 2009 6:20 pm บอร์ด Programming - PHP
2
1331
ศ 09 ต.ค. 2009 11:41 am โดย mindphp View Topic Warning: mysql_num_rows(): supplied argument is not a valid
วิธีการ uninstall Antivir PersonalEdition Classic (ลองทำแบบเ
โดย jubjangjj พ 07 ต.ค. 2009 9:52 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
1881
พ 07 ต.ค. 2009 9:52 pm โดย jubjangjj View Topic วิธีการ uninstall Antivir PersonalEdition Classic (ลองทำแบบเ
Question (html) ใน tag <img> สามารถส่งข้อความไปให้ textbox ไ
โดย mekhong พ 07 ต.ค. 2009 8:54 pm บอร์ด HTML CSS
7
5405
พฤ 15 ต.ค. 2009 8:57 am โดย mekhong View Topic Question (html) ใน tag <img> สามารถส่งข้อความไปให้ textbox ไ