PHP
Python

Trang chủ

Keyword-Only Arguments trong Python

Ngôn ngữ Python là một ngôn ngữ lập trình đa mục đích, nổi tiếng với cú pháp dễ đọc, dễ học và tính ứng dụng cao. Trong lĩnh vực phát triển web, Python thường được sử dụng thông qua các framework như Django và Flask để xây dựng các ứng dụng web mạnh mẽ, bảo mật và dễ mở rộng. Trong chuyên mục này, Vietnix không chỉ cung cấp kiến thức nền tảng về ngôn ngữ Python mà còn hướng dẫn chi tiết cách xây dựng các ứng dụng web thực tế, sử dụng các framework phổ biến và áp dụng các kỹ thuật tiên tiến. Vietnix cam kết liên tục cập nhật những bài viết mới nhất về các tính năng mới của Python, các thư viện hỗ trợ hữu ích và những phương pháp tốt nhất, giúp bạn khai thác tối đa sức mạnh của Python và hoàn thiện kỹ năng lập trình web của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
09/01/2025
7 phút đọc
Theo dõi Vietnix trên

Keyword-Only Arguments trong Python

Một trong những khó khăn thường gặp trong Python là truyền đối số cho hàm một cách chính xác. Với “Keyword-Only Arguments”, bạn có thể kiểm soát và giảm thiểu tối đa những rủi ro này. Trong bài viết này mình sẽ trình bày chi tiết về cách thức hoạt động cũng như cách sử dụng tính năng này để viết code Python đáng tin cậy hơn.

Keyword-Only Arguments trong Python là gì?

Đối số chỉ định theo từ khóa (Keyword-Only Arguments) là một loại tham số đặc biệt trong Python, được thiết kế để bắt buộc người dùng khi gọi hàm phải chỉ định giá trị cho tham số đó thông qua tên của tham số, chứ không chỉ dựa vào vị trí. Nói cách khác, bạn không thể truyền giá trị cho đối số keyword-only bằng cách đặt nó ở một vị trí nhất định trong danh sách các tham số khi gọi hàm, mà buộc phải chỉ định tên của tham số đó một cách rõ ràng.

Trong Python, khi định nghĩa hàm, bạn có thể sử dụng tên của các tham số (parameters) để truyền giá trị vào, giống như sử dụng từ khóa. Việc truyền đối số qua từ khóa thường là tùy chọn, nhưng với đối số keyword-only, điều này là bắt buộc.

Ví dụ về Keyword-Only Arguments trong Python

Hàm print() tích hợp sẵn trong Python là một ví dụ điển hình về việc sử dụng đối số chỉ định bằng tên. Bạn có thể truyền một danh sách các biểu thức để in ra trong cặp dấu ngoặc đơn. Theo mặc định, các giá trị in ra sẽ được phân tách nhau bởi một khoảng trắng. Bạn cũng có thể chỉ định một ký tự phân tách khác bằng cách sử dụng đối số “sep“.

print("Xin", "chào", "mọi", "người", sep="-"

Đoạn code trên sẽ in ra kết quả:

Xin-chào-mọi-người

Giải thích và Diễn giải chi tiết:

  • Đối Số Chỉ Định Bằng Tên (Keyword-Only Arguments): Thay vì chỉ sử dụng vị trí của tham số để truyền giá trị, ta có thể truyền giá trị vào bằng cách chỉ rõ tên của tham số đó. Với các đối số thông thường, Python xác định giá trị tương ứng của từng tham số dựa vào vị trí truyền vào. Ngược lại, “đối số chỉ định bằng tên” (hay keyword-only arguments) thì luôn cần được chỉ rõ tên tham số khi gọi hàm. Điều này giúp tăng tính rõ ràng của code, đặc biệt khi hàm có nhiều tham số.
  • Dấu Hoa Thị *: Dấu hoa thị * đóng vai trò quan trọng, nó đánh dấu điểm mà các đối số theo sau bắt buộc phải được truyền bằng cách sử dụng tên tham số (tức là các “đối số chỉ định bằng tên”).
  • Ví dụ print(): Hàm print() thường được sử dụng với đối số sep (separator) để thay đổi ký tự phân tách giữa các giá trị. Tham số sep là một ví dụ về đối số chỉ định bằng tên. Bạn buộc phải dùng sep= để gán giá trị thay vì chỉ truyền một giá trị ở vị trí đó. Điều này rất hữu ích khi bạn muốn tùy chỉnh cách hiển thị dữ liệu.

Ví dụ: sử dụng sep với keyword-only arguments sai cách

Tham số sep của hàm print() là một ví dụ điển hình về tham số chỉ định theo từ khóa. Nếu bạn thử truyền giá trị cho sep mà không dùng từ khóa sep=, bạn sẽ không nhận được kết quả như mong đợi. Hãy xem qua ví dụ bên dưới:

print ("Chào", "Thế", "Giới", "-")

Kết quả khi chạy là:

Chào Thế Giới –

Giải thích:

  • Trong ví dụ trên, dấu gạch ngang (-) được in ra như một phần của chuỗi, chứ không phải được sử dụng làm dấu phân cách giữa các chuỗi. Lí do là vì sep là một tham số chỉ định theo từ khóa và không được sử dụng đúng cách ở đây.

Sử dụng Keyword-Only argument trong hàm tự định nghĩa

Trong Python, để tạo ra một tham số chỉ có thể được truyền bằng từ khóa (keyword-only argument), bạn đặt một dấu hoa thị * trước tham số đó khi định nghĩa hàm.

Các hàm do người dùng tự định nghĩa (user-defined functions) là những hàm mà chúng ta tự viết trong một class hoặc module, để thực hiện các hành động cụ thể.

Ví dụ

Trong hàm tinh_lai() tự định nghĩa dưới đây, tham số lai_suat là một tham số keyword-only. Điều này có nghĩa là, khi gọi hàm tinh_lai(), giá trị cho tham số lai_suat phải được truyền bằng từ khóa (ví dụ lai_suat=...).

def tinh_lai(so_tien, *, lai_suat):
    tien_lai = so_tien * lai_suat / 100
    return tien_lai
tien_thu_duoc = tinh_lai(1000000, lai_suat=7)
print(tien_thu_duoc)

Kết quả khi chạy đoạn code trên:

70000.0

Lưu ý: Nếu bạn cố gắng gọi hàm tinh_lai() theo cách truyền tham số thông thường (theo vị trí), chương trình sẽ báo lỗi.

Giải thích code:

  • def tinh_lai(so_tien, *, lai_suat):: Đây là định nghĩa của hàm tinh_lai.
  • so_tien là tham số thông thường (positional argument).
  • Dấu hoa thị * chỉ ra rằng các tham số theo sau nó (lai_suat) sẽ là các tham số keyword-only.
  • lai_suat là tham số keyword-only, bắt buộc phải truyền bằng từ khóa.
  • tien_lai = so_tien * lai_suat / 100: Câu lệnh này tính số tiền lãi.
  • return tien_lai: Hàm trả về số tiền lãi vừa tính.
  • tien_thu_duoc = tinh_lai(1000000, lai_suat=7): Đây là cách gọi hàm tinh_lai đúng, truyền giá trị cho tham số keyword-only lai_suat bằng cách lai_suat=7.
  • print(tien_thu_duoc): Câu lệnh in kết quả.

Ví dụ: Lỗi khi gọi hàm với Keyword-Only argument không đúng cách

Đoạn code dưới đây minh họa rằng, không thể sử dụng tham số theo vị trí (positional arguments) khi hàm yêu cầu tham số keyword-only.

def tinh_lai(so_tien, *, lai_suat):
    tien_lai = so_tien * lai_suat / 100
    return tien_lai

tien_lai_sai = tinh_lai(1000000, 7)
print(tien_lai_sai)

Khi chạy đoạn code này, bạn sẽ thấy kết quả lỗi như sau:

tien_lai_sai = tinh_lai(1000000, 7)
^^^^^^^^^^^^^^^^^^^^^
TypeError: tinh_lai() takes 1 positional argument but 2 were given

Giải thích code và lỗi:

  • def tinh_lai(so_tien, *, lai_suat):: Như đã giải thích ở trên, hàm tinh_lai được định nghĩa với so_tien là tham số thông thường và lai_suat là tham số keyword-only.
  • tien_lai_sai = tinh_lai(1000000, 7): Dòng code này cố gắng gọi hàm tinh_lai với 1000000 cho so_tien7 cho lai_suat, nhưng truyền 7 theo vị trí (tức là truyền tham số thông thường).
  • TypeError: tinh_lai() takes 1 positional argument but 2 were given: Python báo lỗi TypeError vì hàm tinh_lai chỉ chấp nhận một tham số theo vị trí (so_tien), nhưng chúng ta lại truyền tới 2 tham số theo vị trí (bao gồm 10000007). Điều này là không hợp lệ vì tham số lai_suat đã được chỉ định là tham số keyword-only.

Lời kết

Như vậy, chúng ta đã khám phá xong về Keyword-Only Arguments, một yếu tố quan trọng giúp tăng tính chính xác và dễ đọc cho các hàm trong Python. Mong rằng những thông tin trên sẽ giúp bạn hiểu rõ hơn và sử dụng linh hoạt tính năng này trong quá trình viết code.

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn