ในบางกรณี จำนวนของพารามิเตอร์ที่เราส่งเข้าไปในฟังก์ชันอาจมีจำนวนที่ไม่แน่นอน ขึ้นอยู่กับข้อมูลที่มีอยู่เช่น ฟังก์ชันในการหาผลรวมของชุดตัวเลข แต่จำนวนตัวเลขในแต่ละชุดอาจมีไม่เท่ากัน ดังนั้น จึงมีการกำหนดพารามิเตอร์อีกรูปแบบหนึ่ง ซึ่งเรียกว่า 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 (สตริง) ในไพทอน

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
แนะนำการเดินทางและสถานที่ท่องเที่ยวในจังหวัดตรังและการเดินทางไปกรุงเทพ
โดย wightfall จ 22 เม.ย. 2024 3:41 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
20
จ 22 เม.ย. 2024 3:41 pm โดย wightfall View Topic แนะนำการเดินทางและสถานที่ท่องเที่ยวในจังหวัดตรังและการเดินทางไปกรุงเทพ
ติดตั้ง ESXi ใหม่ จำเป็นต้อง Format Harddisk ก่อนติดตั้งไหมครับ
โดย จิ๊กโก๋ ส 20 เม.ย. 2024 2:29 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
3
145
อ 23 เม.ย. 2024 2:24 pm โดย mindphp View Topic ติดตั้ง ESXi ใหม่ จำเป็นต้อง Format Harddisk ก่อนติดตั้งไหมครับ
แจ้งปัญหาโพสบทความลงในเว็บบอร์ดส่วนตัวไม่ได้
โดย internTk21 ศ 19 เม.ย. 2024 11:56 am บอร์ด MindPHP News & Feedback
1
46
ศ 19 เม.ย. 2024 12:15 pm โดย internTk21 View Topic แจ้งปัญหาโพสบทความลงในเว็บบอร์ดส่วนตัวไม่ได้
สอบถาม Google Structure ที่เหมาะกับคอร์สเรียนควรใช้แบบไหนดีค่ะ
โดย eange08 ศ 19 เม.ย. 2024 9:56 am บอร์ด Programming - PHP
1
80
ศ 19 เม.ย. 2024 10:28 am โดย mindphp View Topic สอบถาม Google Structure ที่เหมาะกับคอร์สเรียนควรใช้แบบไหนดีค่ะ
คำสั่งรวมไฟล์ และ บีบอัดในคำสั่งเดียว tar, zip
โดย mindphp พ 17 เม.ย. 2024 7:42 pm บอร์ด Linux - Web Server
0
123
พ 17 เม.ย. 2024 7:42 pm โดย mindphp View Topic คำสั่งรวมไฟล์ และ บีบอัดในคำสั่งเดียว  tar, zip
เช็คขนาดพื้นที่ฐานข้อมูล แต่ละก้อน แต่ละฐานข้อมูลว่าใช้พื้นที่ไปเท่าไหร่ ด้วย Comamnd Line
โดย mindphp จ 15 เม.ย. 2024 11:10 pm บอร์ด PostgreSQL
1
299
จ 15 เม.ย. 2024 11:14 pm โดย mindphp View Topic เช็คขนาดพื้นที่ฐานข้อมูล แต่ละก้อน แต่ละฐานข้อมูลว่าใช้พื้นที่ไปเท่าไหร่ ด้วย Comamnd Line
การติดตั้ง WSL เพื่อใช้งาน Linux Terminal บน Windows
โดย tsukasaz ศ 12 เม.ย. 2024 2:25 pm บอร์ด Share Knowledge
0
317
ศ 12 เม.ย. 2024 2:25 pm โดย tsukasaz View Topic การติดตั้ง WSL เพื่อใช้งาน Linux Terminal บน Windows
Super Сasual Dating - Real Women
โดย heroxbay ศ 12 เม.ย. 2024 8:55 am บอร์ด Microsoft Office Knowledge & line & Etc
0
259
ศ 12 เม.ย. 2024 8:55 am โดย heroxbay View Topic Super Сasual Dating - Real Women