Computer >> Máy Tính >  >> Lập trình >> Python

Trả lại nhiều giá trị trong Python?

Các hàm Python có thể trả về nhiều giá trị. Các giá trị này có thể được lưu trữ trực tiếp trong các biến. Một hàm không bị giới hạn để trả về một biến, nó có thể trả về 0, một, hai hoặc nhiều giá trị.

Đây là thuộc tính mặc định của python để trả về nhiều giá trị / biến không có sẵn trong nhiều ngôn ngữ lập trình khác như C ++ hoặc Java.

Để trả về nhiều giá trị từ một hàm, chúng tôi có thể trả về tuple, danh sách hoặc đối tượng từ điển theo yêu cầu của chúng tôi.

Phương pháp 1:Sử dụng tuple

def func(x):
   y0 = x+ 1
   y1 = x * 3
   y2 = y0 ** 3
   return (y0, y1, y2)

Tuy nhiên, chương trình trên gặp vấn đề khi số lượng giá trị trả về tăng lên. Trong trường hợp nếu chúng ta muốn trả về sáu hoặc bảy giá trị? Chắc chắn, chúng ta có thể tiếp tục điều chỉnh chúng, nhưng rất dễ quên giá trị nào nằm ở đâu. Ngoài ra, việc giải nén chúng ở bất cứ nơi nào chúng tôi muốn nhận cũng hơi lộn xộn.

Phương pháp 2:Sử dụng từ điển

Một giải pháp khác tốt hơn là sử dụng từ điển.

def func(x):
   y0 = x+ 1
   y1 = x * 3
   y2 = y0 ** 3
   return {'y0': y0, 'y1': y1, 'y2': y2}

Bây giờ, chúng ta có một cơ chế mà theo đó chúng ta có thể chiếu ra một thành viên cụ thể của đối tượng được trả về.

Ví dụ -

result[‘y1’]

Phương pháp 3:Sử dụng một lớp

Một tùy chọn khác là sử dụng lớp, nơi chúng ta có thể trả về một cấu trúc chuyên biệt.

class ReturnValue(obj):
   def __init__(self, y0, y1, y2):
      self.y0 = y0
      self.y1 = y1
      self.y2 = y2

def g(x):
   y0 = x + 1
   y1 = x * 3
   y2 = y0 ** 3
   return ReturnValue (y0, y1, y2)

Phương pháp 4:Sử dụng danh sách

Một phương pháp khác là sử dụng danh sách.

def func(x):
   result = [x + 1]
   result.append(x * 3)
   result.append(y0 ** 3)
   return result

Phương pháp 5:Sử dụng trình tạo

Chúng tôi có thể chọn tùy chọn sử dụng lợi nhuận này để trả về từng giá trị một, trong trường hợp chúng tôi phải trả về một số lượng giá trị lớn thì việc sử dụng trình tự có thể tiêu tốn nhiều tài nguyên hệ thống.

def func(x):
   y0 = x + 1
   yield y0
   yield x * 3
   yield y0 ** 3

Phương pháp nào tốt nhất để trả về nhiều giá trị từ một hàm?

Tất cả tùy thuộc vào sở thích hoặc yêu cầu của bạn mà bạn thích phương pháp nào hơn. Bạn có thể chọn - từ điển tuyến đường vì nó ít liên quan đến công việc thiết lập hơn. Hoặc bạn có thể chọn lộ trình lớp học vì điều đó có thể giúp bạn tránh nhầm lẫn những gì từ điển đại diện. Hoặc bạn có thể chọn trình tạo để mang lại từng giá trị một.