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