Cách sử dụng *args và **kwargs trong hàm Python
Làm chủ *args và **kwargs trong Python. Tìm hiểu cách viết các hàm linh hoạt với các đối số từ khóa và vị trí động, giải nén các bộ sưu tập và xây dựng các hàm bao bọc.
Tổng quan
Trong Python, bạn thường sẽ cần thiết kế các hàm có thể chấp nhận số lượng đối số thay đổi. Ví dụ: hàm tính tổng của số nguyên bất kỳ hoặc hàm ghi nhật ký siêu dữ liệu với các trường khác nhau. Thay vì buộc người dùng phải chuyển một danh sách hoặc từ điển, Python cung cấp hai ký hiệu đặc biệt: `*args` và `**kwargs`.
Cú pháp `*args` cho phép một hàm chấp nhận bất kỳ số lượng đối số vị trí nào. Dấu hoa thị đơn `*` hoạt động như một toán tử giải nén. Khi được đặt trong định nghĩa hàm, nó sẽ thu thập các đối số vị trí bổ sung vào một bộ dữ liệu có tên là `args`. Điều này cho phép bạn lặp lại các giá trị đầu vào, chạy tính toán hoặc chuyển chúng sang hàm khác một cách dễ dàng.
Mặt khác, cú pháp `**kwargs` cho phép một hàm chấp nhận bất kỳ số lượng đối số từ khóa (được đặt tên) nào. Dấu hoa thị kép `**` thu thập các đối số này vào một từ điển có tên `kwargs`. Điều này cực kỳ hữu ích để chuyển các cấu hình tùy chọn, đối số kiểu dáng hoặc thuộc tính cơ sở dữ liệu. Hãy nhớ rằng tên 'args' và 'kwargs' là quy ước; chức năng thực tế được điều khiển bởi dấu hoa thị đơn và đôi.
Đầu ra mã & thực thi
Mã này minh họa việc sử dụng *args để tính tổng các số biến, **kwargs để in hồ sơ người dùng và kết hợp cả hai trong một hàm duy nhất.
def sum_all(*args):
print("args type:", type(args).__name__)
return sum(args)
print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))
def print_profile(**kwargs):
print("kwargs type:", type(kwargs).__name__)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_profile(name="Bob", role="developer", country="US")
def master_function(first, *args, **kwargs):
print(f"First argument: {first}")
print(f"Additional positional args: {args}")
print(f"Keyword args: {kwargs}")
master_function("hello", 1, 2, 3, debug=True, user_id=42)args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}Triển khai từng bước
- Sử dụng một dấu hoa thị trước một tham số (ví dụ: *args) để tập hợp các đối số vị trí thành một bộ dữ liệu.
- Sử dụng dấu hoa thị kép trước tham số (ví dụ: **kwargs) để thu thập các đối số từ khóa vào từ điển.
- Duy trì thứ tự tham số chính xác: tham số tiêu chuẩn, *args, tham số chỉ từ khóa, sau đó là **kwargs.
- Sử dụng cú pháp giải nén khi gọi hàm bằng cách chuyển *iterable hoặc **dictionary.
Câu hỏi thường gặp
Tôi có phải sử dụng tên "args" và "kwargs" không?
Không, đây là những quy ước cộng đồng tiêu chuẩn. Chỉ có tiền tố * và ** là bắt buộc về mặt cú pháp. Bạn có thể viết *values và **options, nhưng nên sử dụng *args và **kwargs để dễ đọc.
Thứ tự đúng khi xác định hàm là gì?
Thứ tự đúng của các đối số trong chữ ký hàm là: đối số vị trí, *args, đối số chỉ từ khóa và cuối cùng là **kwargs.
Chủ đề liên quan
Tìm hiểu cách tạo một lớp trong Python. Nắm vững hàm tạo __init__, các phương thức phiên bản, từ khóa self và khởi tạo đối tượng.
Cách sử dụng hàm Lambda trong PythonTìm hiểu cách sử dụng hàm lambda trong Python. Nắm vững các hàm ẩn danh, lệnh gọi lại nội tuyến và sắp xếp dữ liệu danh sách bằng khóa lambda.
Tài nguyên Python được đề xuất
Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.
Vòng lặp Python
Tìm hiểu cách sử dụng vòng lặp Python để lặp lại dữ liệu. Nắm vững các phương pháp hay nhất về vòng lặp for, while, ngắt, tiếp tục và lặp bằng các ví dụ tương tác.
Bảng cheat phương thức chuỗi Python
Hướng dẫn tham khảo đầy đủ về thao tác chuỗi Python. Làm chủ định dạng, tìm kiếm, phân tách, thay thế và kiểm tra thuộc tính chuỗi.
Python vs JavaScript: Ngôn ngữ lập trình nào tốt nhất?
So sánh toàn diện giữa Python và JavaScript. Khám phá sự khác biệt về cú pháp, hiệu suất, trường hợp sử dụng (phụ trợ so với giao diện người dùng) và các ví dụ về mã hóa.