Python - Đối số Mặc định

Xin chào các bạn nhà lập trình Python mới! Hôm nay, chúng ta sẽ điều hành vào thế giới tuyệt vời của các đối số mặc định trong Python. Là một giáo viên khoa học máy tính hàng xóm thân thiện, tôi rất mong mỏi hướng dẫn các bạn qua cuộc hành trình này. Vậy, hãy lấy ly thức uống yêu thích của bạn, thư giãn và cùng nhau khám phá cuộc phiêu lưu Python này!

Python - Default Arguments

Đối số Mặc định Là Gì?

Trước khi bước vào chi tiết, hãy bắt đầu với những điều cơ bản. Đối số mặc định là một tính năng tuyệt vời trong Python, cho phép bạn định nghĩa các tham số hàm với các giá trị sẵn có. Những giá trị này sẽ được sử dụng nếu bạn không cung cấp một giá trị cụ thể khi gọi hàm.

Hãy tưởng tượng đối số mặc định như một mạng an toàn. Chúng là để bắt bạn nếu bạn quên chỉ định một giá trị, đảm bảo hàm của bạn vẫn có thể chạy suôn sẻ. Đó như có một người bạn luôn mang theo thêm đồ ăn cho cuộc picnic - bạn có thể không luôn cần chúng, nhưng lại rất tốt khi có chúng để sẵn sàng!

Tại Sao Sử Dụng Đối số Mặc định?

  1. Chúng làm cho mã của bạn trở nên linh hoạt hơn.
  2. Chúng giảm số lượng các đối số bạn cần cung cấp.
  3. Chúng giúp duy trì tính tương thích ngược lại khi thêm các tham số mới vào các hàm.

Bây giờ, hãy xem cách điều này hoạt động trong thực tế!

Ví Dụ Về Đối số Mặc định

Hãy bắt đầu với một ví dụ đơn giản. Tưởng tượng chúng ta đang tạo một hàm để chào mừng mọi người:

def greet(name, greeting="Xin chào"):
return f"{greeting}, {name}!"

# Sử dụng hàm
print(greet("Alice"))
print(greet("Bob", "Chào"))

Đầu ra:

Xin chào, Alice!
Chào, Bob!

Trong ví dụ này, greeting là đối số mặc định của chúng ta. Nếu chúng ta không chỉ định lời chào, hàm sẽ sử dụng "Xin chào" theo mặc định. Hãy phân tích:

  1. Chúng ta đã định nghĩa hàm greet với hai tham số: namegreeting.
  2. greeting có giá trị mặc định là "Xin chào".
  3. Khi chúng ta gọi greet("Alice"), chúng ta chỉ cung cấp name. Hàm sử dụng "Xin chào" theo mặc định cho lời chào.
  4. Khi chúng ta gọi greet("Bob", "Chào"), chúng ta cung cấp cả namegreeting, vì vậy hàm sử dụng "Chào" thay vì mặc định.

Ví Dụ: Gọi Hàm Không Cần Đối Số Tên

Bây giờ, hãy xem một ví dụ phức tạp hơn. Chúng ta sẽ tạo một hàm để tính tổng giá trị của các mặt hàng trong giỏ hàng:

def calculate_total(items, tax_rate=0.08, discount=0):
subtotal = sum(items)
total = subtotal * (1 + tax_rate) - discount
return round(total, 2)

# Sử dụng hàm
cart1 = [10, 20, 30]
print(calculate_total(cart1))
print(calculate_total(cart1, 0.10))
print(calculate_total(cart1, 0.10, 5))

Đầu ra:

64.80
66.00
61.00

Hãy phân tích:

  1. Hàm calculate_total của chúng ta có ba tham số: items (bắt buộc), tax_rate (mặc định 0.08), và discount (mặc định 0).
  2. Trong lần gọi đầu tiên, chúng ta chỉ cung cấp items. Hàm sử dụng mức thuế mặc định và không có giảm giá.
  3. Trong lần gọi thứ hai, chúng ta cung cấp items và mức thuế tùy chỉnh là 0.10. Giảm giá vẫn là 0.
  4. Trong lần gọi thứ ba, chúng ta cung cấp tất cả ba tham số: items, mức thuế và giảm giá là 5.

Nhớ rằng, khi gọi hàm mà không có đối số tên, thứ tự rất quan trọng! Python gán giá trị cho các tham số theo thứ tự chúng được cung cấp.

Đối Tượng Thay Đổi Có Thể Làm Đối số Mặc định

Bây giờ, đây là nơi mà điều gì đó trở nên phức tạp. Sử dụng các đối tượng có thể thay đổi (như danh sách hoặc từ điển) như đối số mặc định có thể dẫn đến hành vi bất ngờ. Hãy tôi cho bạn thấy điều gì tôi muốn nói:

def add_item(item, shopping_list=[]):
shopping_list.append(item)
return shopping_list

print(add_item("táo"))
print(add_item("chuối"))
print(add_item("cherry"))

Đầu ra:

['táo']
['táo', 'chuối']
['táo', 'chuối', 'cherry']

Ngạc nhiên! Danh sách liên tục phát triển với mỗi lần gọi. Điều này xảy ra vì danh sách mặc định chỉ được tạo một lần khi hàm được định nghĩa, không phải mỗi lần gọi hàm.

Để tránh điều này, chúng ta có thể sử dụng None làm mặc định và tạo danh sách mới trong hàm:

def add_item(item, shopping_list=None):
if shopping_list is None:
shopping_list = []
shopping_list.append(item)
return shopping_list

print(add_item("táo"))
print(add_item("chuối"))
print(add_item("cherry"))

Đầu ra:

['táo']
['chuối']
['cherry']

Rất tốt hơn! Giờ mỗi lần gọi sẽ tạo một danh sách mới như mong đợi.

Tóm Tắt Đối số Mặc định Của Python

Hãy tóm tắt những gì chúng ta đã học trong bảng dễ hiểu sau:

Concept Mô tả Ví dụ
Đối số Mặc định Cơ bản Cung cấp giá trị mặc định cho một tham số def greet(name, greeting="Xin chào"):
Nhiều Đối số Mặc định Một hàm có thể có nhiều đối số mặc định def calculate_total(items, tax_rate=0.08, discount=0):
Thứ tự Của Đối số Các đối số không mặc định phải đặt trước các đối số mặc định trong định nghĩa hàm def func(required, optional=default):
Đối số Thay Đổi Có Thể Làm Đối số Mặc định Tránh sử dụng các đối tượng có thể thay đổi như đối số mặc định Sử dụng None làm mặc định và tạo đối tượng trong hàm
Đối số Tên Cho phép gọi hàm với các đối số có tên trong bất kỳ thứ tự nào calculate_total(items=[10, 20], discount=5)

Và đó là như vậy, các bạn! Bạn đã vừa nâng cấp kỹ năng Python của mình với các đối số mặc định. Nhớ rằng, như bất kỳ công cụ mạnh mẽ nào, hãy sử dụng chúng một cách khôn ngoan. Chúng có thể làm mã của bạn trở nên linh hoạt hơn và dễ sử dụng hơn, nhưng hãy cẩn thận với các đối số thay đổi mặc định!

Hãy tiếp tục tập luyện, giữ được sự tò mò và hạnh phúc mã hóa! Trước khi bạn biết, bạn sẽ viết Python như một chuyên gia. Đến lần sau, đây là giáo viên khoa học máy tính hàng xóm thân thiện của bạn, kính buổi!

Credits: Image by storyset