PHP
Python

Trang chủ

Tìm hiểu chi tiết về keyword 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
9 phút đọc
Theo dõi Vietnix trên

Tìm hiểu chi tiết về keyword arguments trong Python

Keyword Arguments là một tính năng quan trọng trong Python, cho phép bạn truyền tham số một cách rõ ràng và linh hoạt hơn khi gọi hàm. Trong bài viết này, mình sẽ giúp bạn đi sâu vào chi tiết về cách thức hoạt động của Keyword Arguments, những ưu điểm của việc sử dụng các đối số này và làm thế nào để tránh các lỗi phổ biến.

Keyword Arguments trong Python là gì?

Đối Số Từ Khóa (Keyword Arguments) trong Python là một cơ chế linh hoạt cho phép bạn truyền dữ liệu (các đối số) vào hàm bằng cách sử dụng tên của các tham số (parameter) như “từ khóa” (keyword).

image 668
Tìm hiểu chi tiết về keyword arguments trong Python 4

Thay vì phải nhớ và truyền đúng thứ tự của các đối số như cách thông thường (đối số vị trí), bạn có thể chỉ định trực tiếp tên tham số cùng với giá trị mà nó nhận được khi gọi hàm. Điều này có nghĩa, các biến (tham số) trong định nghĩa hàm được coi như các từ khóa. Khi gọi hàm, bạn có thể xác định rõ tên “từ khóa” này và gán cho nó một giá trị tương ứng.

Việc sử dụng đối số từ khóa mang lại nhiều lợi ích, bao gồm:

  • Tính Rõ Ràng: Với đối số từ khóa, mục đích của từng đối số trong hàm trở nên rõ ràng hơn, dễ hiểu hơn. Người đọc mã không cần phải nhớ thứ tự các đối số, chỉ cần nhìn vào tên tham số (từ khóa) là biết đối số đó để làm gì.
  • Tính Linh Hoạt: Bạn có thể tự do thay đổi thứ tự các đối số khi gọi hàm mà không lo bị sai lệch giá trị. Vì mỗi đối số đều được xác định bằng tên, Python có thể biết chính xác giá trị nào cần được gán cho tham số nào.
  • Dễ Bảo Trì và Đọc Hiểu: Mã sử dụng đối số từ khóa dễ đọc và dễ bảo trì hơn, đặc biệt đối với các hàm có nhiều đối số. Người khác có thể nhanh chóng nắm bắt được mục đích của từng đối số trong hàm.

Gọi hàm với keyword arguments trong Python

Ví dụ dưới đây sẽ minh họa việc sử dụng đối số từ khóa trong Python. Ở lần gọi hàm thứ hai, ta sẽ sử dụng cú pháp truyền đối số theo từ khóa:

# Định nghĩa hàm
def printinfo(name, age):
    "Hàm này in thông tin đã truyền vào"
    print("Tên:", name)
    print("Tuổi:", age)
    return

# Gọi hàm printinfo
# Lần 1: dùng đối số theo vị trí (positional arguments)
printinfo("Naveen", 29)

# Lần 2: dùng đối số từ khóa (keyword arguments)
printinfo(name="miki", age=30)

Khi thực thi đoạn code này, kết quả hiển thị trên màn hình như sau:

Tên: Naveen
Tuổi: 29
Tên: miki
Tuổi: 30

Diễn giải chi tiết:

  • def printinfo(name, age):: Câu lệnh này định nghĩa một hàm tên là printinfo nhận vào hai đối số là name (tên) và age (tuổi). Các biến nameage này cũng được xem như là từ khóa trong ngữ cảnh đối số từ khóa.
  • printinfo("Naveen", 29): Đây là cách gọi hàm truyền thống, khi đối số được truyền vào dựa vào vị trí tương ứng trong định nghĩa hàm. Ví dụ "Naveen" được gán vào namename đứng trước age, tương tự với 29 được gán cho age.
  • printinfo(name="miki", age=30): Đây là cách gọi hàm sử dụng đối số từ khóa. Lúc này, ta chỉ định rõ ràng: đối số name nhận giá trị là "miki", và đối số age nhận giá trị là 30. Việc này cho phép ta thay đổi vị trí của các đối số khi gọi hàm mà không làm sai lệch giá trị, vì các đối số đã được xác định rõ bằng tên.

Thứ tự của keyword arguments trong Python

Theo mặc định, các hàm trong Python gán giá trị cho đối số theo thứ tự xuất hiện của chúng trong định nghĩa hàm. Tuy nhiên, khi sử dụng đối số từ khóa, bạn không nhất thiết phải tuân theo thứ tự này. Nói cách khác, thứ tự của đối số từ khóa khi gọi hàm có thể khác so với thứ tự chúng được định nghĩa trong hàm. Việc dùng đối số từ khóa là tùy chọn. Bạn cũng có thể kết hợp việc truyền đối số theo cả vị trí (positional arguments) và theo từ khóa.

Ví dụ về thứ tự đối số từ khóa

Để hiểu rõ hơn về điều này, chúng ta hãy xem xét hàm division dưới đây:

def division(num, den):
    quotient = num / den
    print ("num:{} den:{} quotient:{}".format(num, den, quotient))

division(10, 5)
division(5, 10)

Bởi vì các giá trị được gán dựa trên vị trí tương ứng của các tham số trong định nghĩa hàm (gọi là truyền đối số theo vị trí), nên kết quả xuất ra sẽ như sau:

num:10 den:5 quotient:2.0
num:5 den:10 quotient:0.5

Diễn giải chi tiết:

  • def division(num, den):: Hàm này có tên là division, nhận vào hai đối số: num (số bị chia) và den (số chia).
  • division(10, 5): Ở lần gọi hàm đầu tiên, giá trị 10 được gán cho num (do 10 nằm ở vị trí đầu tiên khi gọi hàm), và giá trị 5 được gán cho den (do 5 nằm ở vị trí thứ hai khi gọi hàm). Hàm sẽ tính 10/5 = 2.0
  • division(5, 10): Ở lần gọi hàm thứ hai, thứ tự truyền đối số vẫn là (5, 10), vì vậy hàm sẽ hiểu 5 là num và 10 là den. Kết quả sẽ là 5/10=0.5
  • Giải thích về thứ tự đối số: Ví dụ trên cho thấy rằng, nếu ta chỉ dùng các đối số theo vị trí thì vị trí rất quan trọng. Tuy nhiên, nếu sử dụng đối số từ khóa ta có thể bỏ qua thứ tự này khi gọi hàm. Điều này sẽ cho chúng ta sự linh hoạt và tránh gây nhầm lẫn khi truyền nhiều đối số vào một hàm.

Ví dụ chi tiết về keyword arguments

Thay vì truyền các giá trị bằng đối số vị trí (positional arguments) như ở ví dụ trước, bây giờ chúng ta sẽ gọi hàm division bằng cách sử dụng đối số từ khóa:

def division(num, den):
    quotient = num / den
    print("num:{} den:{} quotient:{}".format(num, den, quotient))

division(num=10, den=5)
division(den=5, num=10)

Không giống như đối số vị trí, thứ tự của đối số từ khóa không quan trọng. Kết quả của đoạn code trên sẽ như sau:

num:10 den:5 quotient:2.0
num:10 den:5 quotient:2.0

Lưu ý: Là khi sử dụng cả đối số vị trí và đối số từ khóa trong cùng một lệnh gọi hàm, đối số vị trí phải được đặt trước đối số từ khóa.

Diễn giải chi tiết:

  • def division(num, den):: Hàm division vẫn được định nghĩa như trước, với hai đối số là numden.
  • division(num=10, den=5): Ở lần gọi hàm này, ta sử dụng đối số từ khóa để gán giá trị cho các tham số: num được gán giá trị 10, và den được gán giá trị 5.
  • division(den=5, num=10): Lần này, thứ tự truyền đối số theo từ khóa đã thay đổi. Dù ta truyền den trước num thì hàm vẫn hiểu được den có giá trị 5, và num có giá trị 10. Do đó kết quả trả về vẫn là 10/5 = 2.0. Điều này cho thấy thứ tự của các đối số từ khóa không ảnh hưởng đến cách hàm thực thi.

Giải thích về thứ tự và vị trí đối số:

  • Ví dụ này thể hiện rõ rằng, khác với đối số vị trí cần truyền đúng thứ tự của nó trong lúc định nghĩa hàm. Với đối số từ khóa ta có thể đảo thứ tự các đối số, và chương trình vẫn chạy đúng.
  • Trong trường hợp ta sử dụng hỗn hợp cả đối số vị trí và đối số từ khóa, ta phải truyền đối số vị trí trước, và các đối số từ khóa sau.

Ví dụ về lỗi khi kết hợp đối số từ khóa với đối số vị trí

Hãy thử gọi hàm division() bằng cách kết hợp cả đối số từ khóa và đối số vị trí để xem điều gì xảy ra:

def division(num, den):
   quotient = num/den
   print ("num:{} den:{} quotient:{}".format(num, den, quotient))

division(num=5, 10)

Như đã đề cập trước đó, đối số vị trí không thể xuất hiện sau đối số từ khóa. Vì vậy, Python sẽ báo lỗi như sau:

division(num=5, 10)
^
SyntaxError: non-keyword arg after keyword arg

Diễn giải chi tiết:

  • def division(num, den):: Hàm division vẫn giữ nguyên định nghĩa như trước.
  • division(num=5, 10): Ở đây, ta cố gắng gọi hàm với num=5 (đối số từ khóa) sau đó lại truyền vào 10 (đối số vị trí). Đây là cách kết hợp không hợp lệ trong Python.
  • Thông báo lỗi: Thông báo lỗi “SyntaxError: non-keyword arg after keyword arg” cho ta thấy Python đã bắt gặp một đối số vị trí (số 10) xuất hiện sau một đối số từ khóa (num=5). Python không cho phép làm như vậy, vì điều này làm rối loạn cơ chế gán giá trị cho tham số trong hàm.
  • Quy tắc về vị trí: Thông qua ví dụ lỗi này ta thấy được sự nghiêm ngặt về quy tắc sắp xếp tham số khi gọi hàm trong Python, đó là: đối số vị trí phải đứng trước đối số từ khóa khi gọi hàm.

Lời kết

Vậy là chúng ta vừa cùng nhau khám phá chi tiết về Keyword Arguments trong Python. Hy vọng những kiến thức này sẽ giúp bạn hiểu rõ hơn về cách truyền đối số linh hoạt và tường minh vào hàm, từ đó tối ưu hóa code và tăng hiệu quả làm việc.

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