Vấn đề
Bạn muốn viết hàm chấp nhận bất kỳ số lượng đối số đầu vào nào.
Giải pháp
1. Đối số vị trí tùy ý: *args
Dấu sao * trước tên tham số cho phép nhận nhiều đối số vị trí. Các đối số thêm vào được gom vào một tuple.
Ví dụ: Tính trung bình của 2 hoặc nhiều số.
def define_average(first_arg, *rest_arg):
average = (first_arg + sum(rest_arg)) / (1 + len(rest_arg))
print(f"Output \n *** Trung bình của các số: {average}")
define_average(1, 2) # 1.5
define_average(1, 2, 3, 4) # 2.5
2. Đối số từ khóa tùy ý: **kwargs
Dấu sao kép ** cho phép nhận nhiều đối số từ khóa. Chúng được gom vào một dictionary.
def player_stats(player_name, player_country, **player_titles):
print(f"Type of player_titles: {type(player_titles)}")
titles = ' AND '.join(f'{key} : {value}' for key, value in player_titles.items())
stats = f'The player - {player_name} from {player_country} has {titles}'
return stats
player_stats('Roger Federer', 'Switzerland', Grandslams=20, ATP=103)
Kết quả:
Type of player_titles:
'The player - Roger Federer from Switzerland has Grandslams : 20 AND ATP : 103'
3. Kết hợp cả hai: *args và **kwargs
def func_anyargs(*args, **kwargs):
print(args) # tuple
print(kwargs) # dict
Tất cả đối số vị trí vào args (tuple), tất cả đối số từ khóa vào kwargs (dict).