Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Tìm hiểu về *args và **kwargs trong Python
Trong Python, *args và **kwargs là những cách sử dụng phổ biến trong các hàm, cho phép bạn truyền một số lượng tham số tùy ý vào hàm.

*args: Cho phép truyền một số lượng tham số không xác định vào hàm dưới dạng tuple.**kwargs: Cho phép truyền một số lượng tham số không xác định dưới dạng các cặp key-value (từ điển - dictionary).
*args trong Python
Sử dụng *args cho phép bạn truyền bất kỳ số lượng đối số nào vào một hàm. Bên trong hàm, *args sẽ gói tất cả các đối số đó thành một tuple. Bạn có thể lặp qua tuple này để xử lý các tham số.
Ví dụ:
def foo(*args):
for a in args:
print(a)
# Gọi hàm với 1 tham số
foo(1)
# Kết quả:
# 1
# Gọi hàm với nhiều tham số
foo("Patrick", 30, 1)
# Kết quả:
# Patrick
# 30
# 1
**kwargs trong Python
Sử dụng **kwargs cho phép bạn truyền vào một số lượng tham số không xác định dưới dạng các cặp key-value. Bên trong hàm, **kwargs sẽ chuyển các tham số này thành một dictionary. Bạn có thể duyệt qua dictionary này để xử lý.
Bài viết này được đăng tại [free tuts .net]
Ví dụ:
def foo(**kwargs):
for key, value in kwargs.items():
print(key, value)
# Gọi hàm với các tham số dạng key-value
foo(name="Pat", age="30")
# Kết quả:
# name Pat
# age 30
Kết hợp *args và **kwargs trong Python
Bạn có thể kết hợp *args và **kwargs với các tham số cố định trong hàm. Điều này cho phép bạn truyền vào cả các tham số cố định, tham số không xác định, và các tham số key-value.
Ví dụ:
def foo(name, *args, **kwargs):
print("Name:", name)
for a in args:
print("Arg:", a)
for key, value in kwargs.items():
print(f"{key}: {value}")
foo("Patrick", 30, 1, role='Software Engineer', level=3)
# Kết quả:
# Name: Patrick
# Arg: 30
# Arg: 1
# role: Software Engineer
# level: 3
Unpacking (Mở rộng đối số) trong Python
Ngoài việc sử dụng *args và **kwargs để nhận tham số, bạn cũng có thể sử dụng chúng để mở rộng các đối số khi gọi hàm.
- Với
*: Bạn có thể mở rộng các danh sách, tuple, set, hoặc string thành các đối số của hàm, miễn là độ dài tương ứng với các tham số trong hàm. - Với
**: Bạn có thể mở rộng dictionary thành các cặp key-value, miễn là số lượng key và tên key khớp với các tham số.
Ví dụ:
def foo(a, b, c):
print(a, b, c)
# Mở rộng danh sách
my_list = [1, 2, 3]
foo(*my_list)
# Kết quả:
# 1 2 3
# Mở rộng chuỗi
my_string = "ABC"
foo(*my_string)
# Kết quả:
# A B C
# Mở rộng dictionary
my_dict = {'a': 4, 'b': 5, 'c': 6}
foo(**my_dict)
# Kết quả:
# 4 5 6
Lưu ý khi sử dụng
- Thứ tự tham số: Khi kết hợp tham số thông thường,
*args, và**kwargs, bạn phải tuân thủ thứ tự: các tham số thông thường →*args→**kwargs. Ví dụ:
def foo(arg1, *args, **kwargs):
pass
-
Không lạm dụng
*argsvà**kwargs: Dùng chúng khi cần thiết, tránh làm mất tính minh bạch của hàm. Trong một số trường hợp, việc khai báo cụ thể các tham số sẽ giúp hàm dễ đọc và dễ bảo trì hơn.
Kết bài
*argsdùng để nhận một số lượng đối số không xác định dưới dạng tuple.**kwargsdùng để nhận các tham số key-value không xác định dưới dạng dictionary.- Cả hai đều giúp bạn tạo các hàm linh hoạt hơn khi xử lý nhiều loại đầu vào.
- Bạn có thể sử dụng chúng để mở rộng danh sách, tuple, hoặc dictionary khi gọi hàm.
Với cách sử dụng linh hoạt và mạnh mẽ, *args và **kwargs là công cụ không thể thiếu trong Python, đặc biệt trong các trường hợp cần viết hàm xử lý nhiều loại tham số khác nhau.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng