Python - Đối số Chỉ Bằng Từ Khóa

Xin chào, các bạn học sinh thân mến! Chào mừng các bạn đến với chuyến phiêu lưu hấp dẫn vào thế giới lập trình Python. Hôm nay, chúng ta sẽ khám phá một khái niệm có vẻ khá quáng bái ban đầu, nhưng tôi hứa rằng các bạn sẽ thấy nó rất thú vị và rất hữu ích. Chúng ta sẽ nói về Đối số Chỉ Bằng Từ Khóa!

Python - Keyword-Only Arguments

Đối số Chỉ Bằng Từ Khóa Là Gì?

Hãy tưởng tượng bạn đang đặt một bánh pizza. Bạn biết bạn muốn kích thước lớn, nhưng bạn chưa chắc về những topping nên để. Có phải tuyệt vời nếu bạn có thể chỉ nói, "Tôi muốn một bánh pizza lớn" mà không cần xác định điều gì khác không? Đó chính là điều gì đối số chỉ bằng từ khóa làm trong Python!

Đối số chỉ bằng từ khóa là một loại đặc biệt của tham số hàm có thể chỉ được truyền bằng từ khóa, không phải bằng vị trí. Chúng được giới thiệu trong Python 3 để cung cấp cho các lập trình viên quyền kiểm soát nhiều hơn về cách hàm được gọi và làm cho các cuộc gọi hàm rõ ràng hơn và ít gặp lỗi hơn.

Hãy phân tích nó bước به bước:

Đối số Hàm Cơ Bản

Trước khi chúng ta nhảy vào đối số chỉ bằng từ khóa, hãy nhanh chóng xem lại cách các đối số hàm thông thường hoạt động:

def chao_hoi(ten, tin_nhan):
print(f"{tin_nhan}, {ten}!")

chao_hoi("Alice", "Xin chào")  # Output: Xin chào, Alice!
chao_hoi("Chào buổi sáng", "Bob")  # Output: Bob, Chào buổi sáng!

Trong ví dụ này, thứ tự của các đối số quan trọng. Nếu chúng ta hoán đổi chúng, đầu ra sẽ thay đổi và có thể không có nghĩa.

Giới Thiệu Đối số Chỉ Bằng Từ Khóa

Bây giờ, hãy xem cách đối số chỉ bằng từ khóa có thể giúp:

def chao_hoi(*, ten, tin_nhan):
print(f"{tin_nhan}, {ten}!")

chao_hoi(ten="Alice", tin_nhan="Xin chào")  # Output: Xin chào, Alice!
chao_hoi(tin_nhan="Chào buổi sáng", ten="Bob")  # Output: Chào buổi sáng, Bob!

Có nhận thấy dấu * trước các tham số không? Đó là ký hiệu thần kỳ khiến tất cả các đối số sau đó chỉ có thể truyền bằng từ khóa. Bây giờ, chúng ta phải xác định tên các tham số khi gọi hàm, nhưng thứ tự không còn quan trọng nữa!

Ví Dụ Về Đối số Chỉ Bằng Từ Khóa

Hãy xem một ví dụ thực tế hơn. Giả sử chúng ta đang viết một hàm để tính diện tích hình chữ nhật:

def tinh_dien_tich(*, chieu_dai, chieu_rong):
return chieu_dai * chieu_rong

# Điều này hoạt động:
dien_tich = tinh_dien_tich(chieu_dai=10, chieu_rong=5)
print(f"Diện tích là: {dien_tich}")  # Output: Diện tích là: 50

# Điều này cũng hoạt động:
dien_tich = tinh_dien_tich(chieu_rong=5, chieu_dai=10)
print(f"Diện tích là: {dien_tich}")  # Output: Diện tích là: 50

# Nhưng điều này sẽ gây ra lỗi:
# dien_tich = tinh_dien_tich(10, 5)  # TypeError: tinh_dien_tich() takes 0 positional arguments but 2 were given

Trong ví dụ này, chúng ta phải xác định chieu_daichieu_rong bằng tên. Điều này làm cho mã của chúng ta dễ đọc hơn và ít gặp lỗi hơn, đặc biệt khi xử lý các hàm có nhiều tham số.

Ví Dụ: Sử Dụng "sep" Làm Đối Số Không Phải Từ Khóa

Bây giờ, hãy xem một hàm tích hợp trong Python sử dụng cả đối số thông thường và đối số chỉ bằng từ khóa: hàm print().

print("Xin chào", "Thế giới", sep="-")  # Output: Xin chào-Thế giới

Ở đây, "Xin chào""Thế giới" là các đối số vị trí, trong khi sep là đối số từ khóa. Nhưng sep không phải là chỉ bằng từ khóa; chúng ta cũng có thể sử dụng nó làm đối số vị trí:

print("Xin chào", "Thế giới", "-")  # Output: Xin chào-Thế giới

Tuy nhiên, điều này có thể dẫn đến nhầm lẫn. Đó là lý do Python cho phép chúng ta định nghĩa các hàm của mình với đối số chỉ bằng từ khóa, đảm bảo rằng một số tham số phải luôn được xác định bằng tên.

Sử Dụng Đối số Chỉ Bằng Từ Khóa Trong Phương Thức Định Nghĩa Bởi Người Dùng

Hãy tạo một ví dụ phức tạp hơn để trình bày sức mạnh của đối số chỉ bằng từ khóa trong các phương thức định nghĩa bởi người dùng:

def dinh_dang_ten(*, first, last, middle="", title=""):
if middle:
full_name = f"{first} {middle} {last}"
else:
full_name = f"{first} {last}"

if title:
return f"{title} {full_name}"
else:
return full_name

# Hãy thử các kết hợp khác nhau:
print(dinh_dang_ten(first="John", last="Doe"))
# Output: John Doe

print(dinh_dang_ten(first="Jane", last="Smith", title="Dr."))
# Output: Dr. Jane Smith

print(dinh_dang_ten(first="Alice", middle="Marie", last="Johnson", title="Ms."))
# Output: Ms. Alice Marie Johnson

# Điều này sẽ gây ra lỗi:
# print(dinh_dang_ten("Bob", "Brown"))  # TypeError: dinh_dang_ten() takes 0 positional arguments but 2 were given

Trong ví dụ này, firstlast là các đối số từ khóa bắt buộc, trong khi middletitle là các đối số từ khóa tùy chọn với giá trị mặc định. Hàm này rất linh hoạt và rõ ràng trong việc sử dụng.

Tóm Tắt Các Phương Thức Đối Số Chỉ Bằng Từ Khóa

Dưới đây là bảng tóm tắt các phương thức mà chúng ta đã thảo luận:

Phương thức Mô tả Ví dụ
chao_hoi(*, ten, tin_nhan) Phương thức chào hỏi cơ bản với đối số chỉ bằng từ khóa chao_hoi(ten="Alice", tin_nhan="Xin chào")
tinh_dien_tich(*, chieu_dai, chieu_rong) Tính diện tích hình chữ nhật sử dụng đối số chỉ bằng từ khóa tinh_dien_tich(chieu_dai=10, chieu_rong=5)
dinh_dang_ten(*, first, last, middle="", title="") Định dạng tên với tên đệm tùy chọn và tiêu đề dinh_dang_ten(first="John", last="Doe", title="Mr.")

Nhớ rằng, dấu * trong định nghĩa hàm là điều gì khiến các đối số sau đó chỉ có thể truyền bằng từ khóa!

Kết Luận

Đối số chỉ bằng từ khóa là một tính năng mạnh mẽ trong Python có thể làm cho mã của bạn dễ đọc hơn, ít gặp lỗi hơn và linh hoạt hơn. Chúng rất hữu ích khi bạn đang tạo các hàm có nhiều tham số hoặc khi thứ tự của các đối số có thể gây hiểu lầm.

Khi bạn tiếp tục hành trình Python của mình, bạn sẽ tìm thấy nhiều tình huống hơn nữa mà đối số chỉ bằng từ khóa có thể rất hữu ích. Hãy tiếp tục tập luyện, khám phá và quan trọng nhất, hãy vui vẻ với Python!

Nhớ rằng, mỗi lập trình viên giỏi đều bắt đầu như một người mới bắt đầu. Với kiên nhẫn và thử nghiệm, bạn sẽ viết các chương trình Python phức tạp trước khi biết. Chúc mừng các nhà lập trình Python tương lai!

Credits: Image by storyset