Cách sử dụng đối số từ khóa và biến trong Python
Có ba loại đối số mà một hàm Python có thể chấp nhận: tiêu chuẩn, biến (* args) và từ khóa (** kwargs). Đối số tiêu chuẩn là đối số đơn giản nhất nhưng có chức năng hạn chế. Mặt khác, * args và ** kwargs cho phép bạn làm cho các chức năng của mình linh hoạt hơn, bằng cách chấp nhận một số lượng đầu vào thay đổi.
Kiểu truyền đối số mà bạn chọn phụ thuộc vào bản chất của hàm và kiểu lập trình ưa thích của riêng bạn.
Mục Lục
Các hàm cơ bản trong Python
Để hiểu cách hoạt động của hai đối số biến trong các hàm Python, điều cần thiết là phải hiểu lý do tại sao chúng tồn tại ngay từ đầu. Một hàm đơn giản khai báo một số cố định các đối số ẩn danh như sau:
def addnum(a, b, c):
return a + b + c
Chức năng này hoạt động tốt, nhưng vẫn còn chỗ để cải thiện. Vấn đề lớn nhất là nó chỉ xử lý hai đối số, vì vậy nó chỉ có thể cộng hai số. Nếu bạn muốn thêm hai hoặc bốn số thì sao? Chức năng này sẽ không cho phép bạn làm như vậy. Việc truyền nhiều hơn hoặc ít đối số hơn hàm chấp nhận sẽ dẫn đến lỗi TypeError.
Tất nhiên, bạn có thể tạo nhiều hàm hơn để chấp nhận số lượng đối số khác nhau. Nhưng điều đó thật bất tiện và sẽ không mở rộng quy mô tốt chút nào. Bạn cũng sẽ cần tạo một hàm mới mỗi khi bạn muốn xử lý một số lượng đầu vào mới.
Đó là nơi xuất hiện các đối số biến và đối số từ khóa. Sử dụng * args và ** kwargs, bạn có thể xác định các hàm linh hoạt có thể sử dụng một số lượng đầu vào thay đổi.
* Args trong Python là gì?
Ý tưởng chính đằng sau * args trong Python là cho phép bạn chuyển một số lượng biến đầu vào cho hàm của bạn. Điều này có ích trong các ứng dụng khác nhau. Ví dụ: hãy nghĩ đến một chương trình máy tính mà bạn muốn cung cấp cho người dùng khả năng cộng hai hoặc nhiều số và trả về tổng.
Lưu ý rằng args chỉ là một tên biến; đó là * điều quan trọng. Bạn có thể sử dụng bất kỳ tên hợp lệ nào cho đối số biến của mình, miễn là bạn bao gồm dấu *.
Cách sử dụng * args
Bạn có thể sửa đổi hàm addnum để lấy một số lượng đầu vào thay đổi như sau:
def addnum(*args):
total = 0for num in args:
total = total + num
return total
Đoạn mã ở trên sử dụng vòng lặp for để lặp qua các đầu vào được cung cấp.
Sau đó, bạn có thể gọi hàm addnum với các đối số biến và nó sẽ hoạt động mà không gặp lỗi:
print(addnum(10, 1, 12, 12, 4, 54, 5))
print(addnum(14, 54, 5))
print(addnum(10, 5))
** kwargs trong Python là gì?
Mặc dù cả * args và ** kwargs đều cho phép chúng ta chuyển một số lượng biến đầu vào cho các hàm, nhưng cái sau lại dành riêng cho các đối số từ khóa. Trong trường hợp bạn không biết, các đối số từ khóa chỉ là những cái tên ưa thích cho các đối số có tên.
Một điều độc đáo khác về ** kwargs là Python biểu thị giá trị như một từ điển.
Cách sử dụng ** kwargs
Giống như * args, dấu hoa thị kép là bit quan trọng; bạn có thể sử dụng bất kỳ từ nào làm tên tham số. Dưới đây là một ví dụ về cách sử dụng ** kwargs trong Python:
def weekly_attendance(**weekdays):
total_attendees = 0for attendees in weekdays.values():
total_attendees = total_attendees + attendees
return total_attendees
print(weekly_attendance(monday = 265, tuesday = 698, wednesday = 365, thursday = 463, friday = 234))
print(weekly_attendance(monday = 265, friday = 234))
print(weekly_attendance(wednesday = 365, thursday = 463, friday = 234))
Đoạn mã trên cũng sử dụng vòng lặp for, nhưng lần này là với phương thức giá trị () tích hợp sẵn của Python. Phương thức đó trả về một đối tượng dạng xem của tất cả các giá trị trong từ điển. Phương thức giá trị () cho phép bạn lặp qua từ điển Python mà không gặp rắc rối.
Sử dụng các đối số biến để làm cho các hàm Python của bạn trở nên linh hoạt
Các đối số của hàm rất hữu ích, nhưng một số hàm có thể có lợi khi chấp nhận một số lượng thay đổi các đối số. Các đối số từ khóa được đặt tên có thể làm cho mã của bạn dễ đọc hơn và dễ sử dụng hơn. Bạn nên nắm bắt các đối số * args và ** kwargs của Python. Chúng khá đơn giản để sử dụng và với chúng, bạn có thể làm cho các chức năng và chương trình của mình linh hoạt hơn.
Bằng cách làm theo các bước và đoạn mã ở trên, chúng tôi hy vọng rằng bây giờ bạn có thể sử dụng các đối số từ khóa và không phải từ khóa biến cho các hàm của mình.