Python - Đối số Tên

Chào bạn, các nhà lập trình Python mới! Hôm nay, chúng ta sẽ bơi lội vào thế giới tuyệt vời của các đối số tên. Là người giáo viên khoa học máy tính bạn thân thiện, tôi rất hứng thú để hướng dẫn bạn qua khái niệm quan trọng này. Hãy tin tôi, khi bạn đã nắm vững các đối số tên, bạn sẽ cảm thấy như bạn đã mở khóa một siêu năng trong Python!

Python - Keyword Arguments

Đối số Tên là gì?

Tưởng tượng bạn đang đặt mua một bánh pizza. Bạn có thể chỉ nói "Tôi muốn một bánh pizza," nhưng điều đó không rõ ràng lắm phải không? Thay vì, bạn có thể nói, "Tôi muốn một bánh pizza lớn với phô mai và pepperoni thêm." Trong trường hợp này, bạn đang xác định rõ ràng những gì bạn muốn - đó chính là hậu quả của các đối số tên trong Python!

Các đối số tên (còn gọi là các đối số có tên) là cách để truyền các đối số vào hàm bằng cách xác định rõ ràng tên tham số cùng với giá trị. Điều này làm cho mã của bạn dễ đọc và linh hoạt hơn.

Hãy xem một ví dụ đơn giản:

def chao_hoi(ten, chao="Xin chào"):
print(f"{chao}, {ten}!")

chao_hoi(ten="Alice")
chao_hoi(ten="Bob", chao="Hi")

Trong ví dụ này, tenchao là các tham số của hàm chao_hoi. Khi chúng ta gọi hàm, chúng ta có thể xác định giá trị nào đi với tham số nào.

Output:

Xin chào, Alice!
Hi, Bob!

Nhận thấy rằng trong lần gọi đầu tiên, chúng ta không xác định một chao, vì vậy nó sử dụng giá trị mặc định "Xin chào". Trong lần gọi thứ hai, chúng ta cung cấp cả tenchao.

Gọi Hàm với Đối số Tên

Bây giờ chúng ta đã hiểu các khái niệm cơ bản, hãy khám phá các cách khác nhau để sử dụng các đối số tên.

1. Kết hợp Đối số Vị trí và Đối số Tên

Bạn có thể kết hợp các đối số vị trí và đối số tên, nhưng nhớ: các đối số vị trí phải đặt trước các đối số tên.

def mo_ta_pet(loai_dong_vat, ten, tuoi):
print(f"Tôi có một {loai_dong_vat} tên {ten}. Nó {tuoi} tuổi.")

mo_ta_pet("mèo", ten="Whiskers", tuoi=3)
mo_ta_pet("chó", "Buddy", tuoi=5)

Output:

Tôi có một mèo tên Whiskers. Nó 3 tuổi.
Tôi có một chó tên Buddy. Nó 5 tuổi.

2. Giá trị Mặc định

Các đối số tên rất hữu ích khi bạn có các giá trị mặc định:

def lam_smoothie(trai_cay="chuối", nuoc_chua="sữa", protein="whey"):
return f"Smoothie của bạn chứa {trai_cay}, {nuoc_chua}, và {protein}."

print(lam_smoothie())
print(lam_smoothie(trai_cay="dâu tây", protein="proteín đậu đỏ"))

Output:

Smoothie của bạn chứa chuối, sữa, và whey.
Smoothie của bạn chứa dâu tây, sữa, và proteín đậu đỏ.

Sự linh hoạt này như có một máy làm smoothie biết lịch sử đặt hàng của bạn nhưng vẫn sẵn sàng điều chỉnh!

3. Đối số Tên Arbitrarily

Đôi khi, bạn có thể không biết trước khi sẽ nhận được bao nhiêu đối số tên một hàm. Python có cách bảo vệ bạn với cú pháp **kwargs:

def xay_dung_ho_so(**thong_tin_nguoi_dung):
ho_so = {}
for key, value in thong_tin_nguoi_dung.items():
ho_so[key] = value
return ho_so

nguoi_dung = xay_dung_ho_so(ten="Alice", tuoi=30, thanh_pho="New York", so_thich="vang")
print(nguoi_dung)

Output:

{'ten': 'Alice', 'tuoi': 30, 'thanh_pho': 'New York', 'so_thich': 'vang'}

Điều này như có một biểu mẫu nơi người dùng có thể điền vào bất kỳ thông tin nhiều hay ít!

Thứ tự Đối số Tên

Khi đến việc đặt thứ tự các đối số trong các hàm Python, có một quy tắc cụ thể cần tuân theo. Như làm việc sắp xếp sách trên kệ sách - có cách đúng để làm!

Dưới đây là thứ tự bạn nên làm theo:

  1. Đối số vị trí
  2. *args (các đối số vị trí Arbitrarily)
  3. Đối số tên với giá trị mặc định
  4. **kwargs (các đối số tên Arbitrarily)

Hãy xem điều này trong hành động:

def ham_phức_tạp(a, b, *args, option=True, **kwargs):
print(f"a = {a}")
print(f"b = {b}")
print(f"args = {args}")
print(f"option = {option}")
print(f"kwargs = {kwargs}")

ham_phức_tạp(1, 2, 3, 4, 5, option=False, x=10, y=20)

Output:

a = 1
b = 2
args = (3, 4, 5)
option = False
kwargs = {'x': 10, 'y': 20}

Trong ví dụ này, 12 là các đối số vị trí, 3, 4, và 5 được thu thập trong *args, option là đối số tên với giá trị mặc định, và xy được thu thập trong **kwargs.

Đối số Tên: Các Tư duy Tốt

Để kết thúc bài học hôm nay, hãy thảo luận về một số tư duy tốt khi sử dụng các đối số tên:

  1. Sử dụng các đối số tên cho các tham số tùy chọn.
  2. Luôn cung cấp giá trị mặc định cho các đối số tên.
  3. Sử dụng các đối số tên để làm cho các lời gọi hàm dễ đọc hơn, đặc biệt khi hàm có nhiều tham số.
  4. Khi định nghĩa hàm, đặt các tham số với giá trị mặc định ở cuối.

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

Loại Đối số Mô tả Ví dụ
Vị trí Được truyền dựa trên vị trí func(1, 2, 3)
Tên Được truyền với tên tham số func(a=1, b=2, c=3)
Mặc định Có giá trị mặc định trong định nghĩa hàm def func(a=1):
Arbitrarily Vị trí Thu thập các đối số vị trí thêm def func(*args):
Arbitrarily Tên Thu thập các đối số tên thêm def func(**kwargs):

Nhớ rằng, việc sử dụng các đối số tên hiệu quả có thể làm cho mã của bạn dễ đọc, linh hoạt và ít gặp lỗi hơn. Đó như đưa ra các hướng dẫn rõ ràng, cụ thể - tương lai của bạn (và các nhà lập trình khác) sẽ cảm ơn bạn!

Đó là tất cả cho bài học hôm nay về các đối số tên trong Python. Tôi hy vọng bạn đã thích hành trình này như tôi đã thích hướng dẫn bạn qua nó. Hãy tiếp tục tập luyện, giữ được sự tò mò và hạnh phúc lập trình!

Credits: Image by storyset