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.