Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python: Trả về nhiều giá trị từ hàm

Python: Trả về nhiều giá trị từ hàm

Bạn có thể trả về nhiều giá trị bằng cách gói các giá trị đó vào dictionary, tuple, hoặc list. Các kiểu dữ liệu này cho phép lưu nhiều giá trị tương tự. Bạn có thể trích xuất giá trị riêng lẻ từ chúng trong chương trình chính. Hoặc, bạn có thể truyền nhiều giá trị và tách chúng bằng dấu phẩy.

Hàm Python có thể trả về nhiều giá trị. Để trả về nhiều giá trị, bạn có thể trả về dictionary, tuple Python, hoặc list cho chương trình chính.

Hướng dẫn này thảo luận cách trả về nhiều giá trị cho chương trình chính dùng hai phương pháp này. Hãy bắt đầu.

Python: Trả về nhiều giá trị

Bạn có thể trả về nhiều giá trị từ hàm Python dùng:

  • List chứa nhiều giá trị.
  • Tuple với nhiều giá trị.
  • Dictionary với nhiều bản ghi.
  • Nhiều giá trị tách bằng dấu phẩy.

Tất cả kiểu dữ liệu trên cho phép lưu nhiều giá trị. Giải pháp trả về nhiều giá trị tách bằng dấu phẩy là thanh lịch nhất. Vì cách này làm rõ ý định: trả về nhiều giá trị riêng biệt về chương trình chính.

Câu lệnh return Python gửi giá trị từ hàm về chương trình chính. Câu lệnh này thường dùng trả về một giá trị. Nó có thể dùng trả về nhiều giá trị.

Python: Trả về nhiều giá trị với dấu phẩy

Bạn có thể trả về nhiều giá trị bằng cách tách các giá trị muốn trả về bằng dấu phẩy. Các giá trị này nên xuất hiện sau câu lệnh return Python.

Ta sẽ viết chương trình tính số lượng bán hàng tại cửa hàng điện tử. Ta chỉ đếm đơn hàng trị giá hơn $500. Chương trình cũng tính giá trị trung bình mỗi đơn hàng.

Đầu tiên, định nghĩa mảng Python chứa danh sách bán hàng:

sales = [59.99, 240.00, 655.25, 75.99]

Tiếp theo, viết hàm Python tính số đơn hàng trị giá > $500 và giá trị trung bình mua hàng:

def calculate_data(sales):
    over_limit = 0
    for s in sales:
        if s > 500:
            over_limit += 1
    average_purchase = sum(sales) / len(sales)
    return over_limit, average_purchase

Hàm lặp qua mỗi đơn hàng trong list dùng for. Nếu đơn hàng > $500, biến over_limit tăng 1. Ta tính giá trị trung bình mua hàng bằng chia tổng giá trị tất cả đơn hàng cho số đơn hàng.

Cuối hàm, dùng return trả về giá trị over_limit và average_purchase về chương trình chính.

Còn lại là gọi hàm và hiển thị dữ liệu tính được ra màn hình:

over_limit, average_purchase = calculate_data(sales)
print("{} đơn hàng trên $500. Giá trị trung bình mỗi đơn là ${}.".format(over_limit, round(average_purchase)))

Ta làm tròn giá trị trung bình đến hai chữ số thập phân dùng round(). Mã in thông báo giá trị tính được. Chạy chương trình:

1 đơn hàng trên $500. Giá trị trung bình mỗi đơn là $258.

Chương trình báo thành công số đơn hàng > $500 và giá trung bình.

Mã này hoạt động vì câu lệnh return biến các giá trị thành tuple và trả về tuple list về chương trình chính. Ta unpack tuple này thành hai biến ở dòng:

over_limit, average_purchase = calculate_data(sales)

Python: Trả về nhiều giá trị với List hoặc Tuple

Cả list và tuple cho phép lưu nhiều giá trị. Nghĩa là ta có thể dùng chúng trả về nhiều giá trị về chương trình chính.

Dùng list hoặc tuple tốt nhất nếu các giá trị trả về có mối quan hệ nào đó. Nhưng bạn có thể dùng cách này trả về bất kỳ tập hợp giá trị nào.

Ta sẽ trả về kích thước mua hàng trung bình và số đơn hàng > $500 về chương trình chính. Hãy tham khảo ví dụ trước và thay đổi nhỏ dùng list:

def calculate_data(sales):
    over_limit = 0
    for s in sales:
        if s > 500:
            over_limit += 1
    average_purchase = sum(sales) / len(sales)
    return [over_limit, average_purchase]

Ta chỉ tách các giá trị thành một list đơn. List chứa số đơn hàng > $500 và giá trị mua hàng trung bình, tương ứng.

Ta cũng có thể trả về cấu trúc dữ liệu tuple. Để làm vậy, thay ngoặc vuông bằng ngoặc nhọn. Yếu tố quan trọng: tuple không chứa giá trị trùng lặp. Nếu có khả năng hai giá trị bạn truyền về chương trình chính bằng nhau, tránh dùng tuple.

Để truy cập giá trị trong chương trình chính, ta dùng chỉ số (indexing):

values = calculate_data(sales)
print("{} đơn hàng trên $500. Giá trị trung bình mỗi đơn là ${}.".format(values[0], round(values[1])))

Ta dùng values[0] truy cập giá trị đầu tiên trong list hàm calculate_data() trả về. Tương ứng với giá trị over_limit trong hàm. Ta dùng values[1] truy cập giá trị mua hàng trung bình.

Mã trả về:

1 đơn hàng trên $500. Giá trị trung bình mỗi đơn là $258.

Mã hoạt động như ví dụ trước, nhưng lần này ta dùng list tách các giá trị.

Python: Trả về nhiều giá trị với Dictionary

Ta có thể trả về nhiều giá trị từ hàm dùng dictionary.

Trong ví dụ trước, ta chỉ trả về hai giá trị. Điều này làm cho cú pháp unpacking (giải nén giá trị vào nhiều biến) tiện lợi.

Nếu làm việc với nhiều giá trị hơn, có thể dễ dàng hơn trả về dictionary liên kết mỗi giá trị với nhãn. Hãy sửa hàm trước dùng dictionary trả về nhiều giá trị:

def calculate_data(sales):
    over_limit = 0
    for s in sales:
        if s > 500:
            over_limit += 1
    average_purchase = sum(sales) / len(sales)
    return {
        "limit": over_limit,
        "average": average_purchase
    }

Hàm trả về dictionary với hai khóa và giá trị. Khóa limit và average dùng định danh duy nhất cho mỗi giá trị. Bây giờ ta sửa lời gọi hàm và câu lệnh print hỗ trợ cú pháp mới:

values = calculate_data(sales)
print("{} đơn hàng trên $500. Giá trị trung bình mỗi đơn là ${}.".format(values["limit"], round(values["average"])))

Ta trả về dictionary về chương trình chính. Gán dictionary cho biến values. Sau đó, dùng chỉ số truy xuất giá trị limit và average.

Chạy chương trình:

1 đơn hàng trên $500. Giá trị trung bình mỗi đơn là $258.

Chương trình trả về cùng phản hồi như trước. Điều này dự kiến vì ta chỉ thay đổi cách trả về giá trị. Logic tính toán giữ nguyên.

Kết luận

Bạn có thể trả về nhiều giá trị từ hàm dùng dictionary, tuple, hoặc list. Tất cả kiểu dữ liệu này cho phép lưu nhiều giá trị. Không có cú pháp đặc biệt trả về nhiều giá trị, nhưng các phương pháp này đóng vai trò thay thế tốt.

Phương pháp tách bằng dấu phẩy ngắn gọn và dễ hiểu nếu làm việc với tập giá trị nhỏ. Nếu bạn trả về phạm vi giá trị lớn hơn từ hàm, bạn có thể muốn dùng dictionary gửi nhiều giá trị về chương trình chính.

Bạn muốn đẩy nhanh hành trình học Python? Xem hướng dẫn "Cách học Python" để có lời khuyên về khóa học Python hàng đầu và tài nguyên học trực tuyến.