Trong Python, *args
và **kwargs
là hai cơ chế cho phép bạn truyền một số lượng không xác định các đối số vào một hàm. Chúng được sử dụng để viết hàm linh hoạt hơn, có thể chấp nhận nhiều tham số hơn mà không cần phải xác định trước số lượng tham số cụ thể. Dưới đây là mô tả chi tiết về cả hai.
*args
Khái Niệm: *args
được sử dụng để truyền một danh sách các đối số không xác định vào một hàm. Khi bạn sử dụng *args
, Python sẽ gom tất cả các đối số không được chỉ định thành một tuple.
Cách Sử Dụng:
def my_function(*args): for arg in args: print(arg) my_function(1, 2, 3) # In ra 1, 2, 3 my_function('a', 'b', 'c', 'd') # In ra a, b, c, d
Kết Quả:
1 2 3 a b c d
Trong ví dụ trên, hàm my_function
có thể nhận bất kỳ số lượng đối số nào và in chúng ra.
**kwargs
Khái Niệm: **kwargs
được sử dụng để truyền một danh sách các đối số không xác định dưới dạng cặp khóa-giá trị vào một hàm. Khi bạn sử dụng **kwargs
, Python sẽ gom tất cả các đối số không được chỉ định thành một dictionary.
Cách Sử Dụng:
def my_function(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") my_function(name='Alice', age=25, city='New York')
Kết Quả:
name: Alice age: 25 city: New York
Trong ví dụ này, hàm my_function
nhận các đối số dưới dạng cặp khóa-giá trị và in ra từng cặp.
*args
và **kwargs
?*args
và **kwargs
sẽ rất hữu ích.*args
và **kwargs
Bạn có thể kết hợp cả *args
và **kwargs
trong cùng một hàm. Khi đó, *args
phải được định nghĩa trước **kwargs
.
def my_function(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) my_function(1, 2, 3, name='Alice', age=25)
Kết Quả:
Arguments: (1, 2, 3) Keyword arguments: {'name': 'Alice', 'age': 25}
*args
và **kwargs
là các công cụ mạnh mẽ trong Python giúp bạn tạo ra các hàm linh hoạt và dễ mở rộng. Việc sử dụng chúng cho phép bạn xử lý một số lượng đối số không xác định mà không cần phải xác định rõ ràng chúng trong phần định nghĩa hàm, làm cho mã của bạn sạch hơn và dễ bảo trì hơn.