Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีเขียนฟังก์ชันใน Python ที่รับอาร์กิวเมนต์ได้ไม่จำกัดจำนวน

ปัญหา

ต้องการเขียนฟังก์ชันที่รับจำนวนอาร์กิวเมนต์ไม่จำกัด (any number of arguments)

โซลูชัน

1. รับ positional arguments ไม่จำกัดด้วย *args

*rest_arg จะเป็น tuple ของอาร์กิวเมนต์เพิ่มเติมทั้งหมด


def define_average(first_arg, *rest_arg):
    average = (first_arg + sum(rest_arg)) / (1 + len(rest_arg))
    print(f"Output \n *** The average for the given numbers {average}")

define_average(1, 2)        # 1.5
define_average(1, 2, 3, 4)  # 2.5

2. รับ keyword arguments ไม่จำกัดด้วย **kwargs

**player_titles จะเป็น dictionary ของ keyword arguments


def player_stats(player_name, player_country, **player_titles):
    print(f"Type of player_titles: {type(player_titles)}")  # dict
    titles = ' AND '.join(f'{key} : {value}' for key, value in player_titles.items())
    stats = 'The player - {name} from {country} has {titles}'.format(
        name=player_name, country=player_country, titles=titles)
    return stats

player_stats('Roger Federer', 'Switzerland', Grandslams=20, ATP=103)
# 'The player - Roger Federer from Switzerland has Grandslams : 20 AND ATP : 103'

3. รับทั้ง positional และ keyword ด้วย *args และ **kwargs


def func_anyargs(*args, **kwargs):
    print(args)   # tuple
    print(kwargs) # dict

Positional arguments ทั้งหมดอยู่ใน tuple args, keyword arguments ทั้งหมดอยู่ใน dict kwargs

สรุป

  • *args → tuple ของ positional arguments
  • **kwargs → dict ของ keyword arguments
  • รวมกันได้: def func(*args, **kwargs)
  • เรียกใช้: func(1, 2, 3, a=4, b=5) → args=(1,2,3), kwargs={'a':4,'b':5}