Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

*args và **kwargs trong Python - Tham số biến đổi


Khi không biết trước số lượng tham số, Python cung cấp *args (positional) và **kwargs (keyword).

*args - Tuple positional arguments

def find_product(*many_nums):
    result = 1
    for num in many_nums:
        result *= num
    print(f"Tích: {result}")

find_product(3, 9)           # 27
find_product(2, 11, 10)      # 220
find_product(*[1,2,3,4])     # Unpack list -> 24

**kwargs - Dict keyword arguments

def country_details(**state_info):
    for k, v in state_info.items():
        print(f"{k} is {v}")

country_details(StateName="Telangana", Capital="Hyderabad", Population=3400000)
country_details(StateName="Andhra Pradesh", Capital="Amaravati", Population=1000000, ForestCoverage="30%")

Kết quả

StateName is Telangana
Capital is Hyderabad
Population is 3400000

StateName is Andhra Pradesh
Capital is Amaravati
Population is 1000000
ForestCoverage is 30%

Kết hợp tất cả

def full_example(required, *args, default="value", **kwargs):
    print(f"Required: {required}")
    print(f"Args: {args}")
    print(f"Default: {default}")
    print(f"Kwargs: {kwargs}")

full_example("req", 1, 2, 3, default="custom", a=10, b=20)

Thứ tự tham số (QUAN TRỌNG)

def func(pos1, pos2, *args, kw1, kw2, **kwargs):
    pass
# 1. Positional-only
# 2. Positional-or-keyword
# 3. *args
# 4. Keyword-only (sau *args hoặc *)
# 5. **kwargs

Unpacking khi gọi

args = (1, 2, 3)
kwargs = {'a': 10, 'b': 20}
func(*args, **kwargs)  # Tương đương func(1, 2, 3, a=10, b=20)

Kết luận

*args → tuple, **kwargs → dict. Cho phép API linh hoạt, decorator, wrapper function. Tuân thủ thứ tự: positional, *args, keyword-only, **kwargs.