Tuy nhiên, điều này nhanh chóng gặp vấn đề khi số lượng giá trị được trả về tăng lên. Nếu bạn muốn trả về bốn hoặc năm giá trị thì sao? . Việc giải nén chúng ở bất cứ đâu bạn muốn nhận cũng khá xấu
Quyền mua. Sử dụng từ điển
Bước hợp lý tiếp theo dường như là giới thiệu một số loại 'ký hiệu bản ghi'. Trong Python, cách rõ ràng để thực hiện việc này là bằng phương tiện của một dict
Hãy xem xét những điều sau đây
def g[x]:
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return {'y0': y0, 'y1': y1 ,'y2': y2}
[Nói rõ hơn, y0, y1 và y2 chỉ có nghĩa là các định danh trừu tượng. Như đã chỉ ra, trong thực tế, bạn sẽ sử dụng các số nhận dạng có ý nghĩa. ]
Bây giờ, chúng ta có một cơ chế nhờ đó chúng ta có thể chiếu ra một phần tử cụ thể của đối tượng được trả về. Ví dụ,
result['y0']
Quyền mua. Sử dụng một lớp
Tuy nhiên, có một lựa chọn khác. Thay vào đó, chúng ta có thể trả về một cấu trúc chuyên biệt. Tôi đã đóng khung điều này trong ngữ cảnh của Python, nhưng tôi chắc chắn rằng nó cũng áp dụng cho các ngôn ngữ khác. Thật vậy, nếu bạn đang làm việc trong C thì đây rất có thể là lựa chọn duy nhất của bạn. Đây đi
class ReturnValue:
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 ** y3
return ReturnValue[y0, y1, y2]
Trong Python, hai phần trước có lẽ rất giống nhau về hệ thống ống nước - xét cho cùng thì { y0, y1, y2 }
cuối cùng chỉ là các mục nhập trong nội bộ __dict__
của
def g[x]:
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return {'y0': y0, 'y1': y1 ,'y2': y2}
0Có một tính năng bổ sung do Python cung cấp cho các đối tượng nhỏ, thuộc tính
def g[x]:
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return {'y0': y0, 'y1': y1 ,'y2': y2}
1. Các lớp có thể được thể hiện nhưclass ReturnValue[object]:
__slots__ = ["y0", "y1", "y2"]
def __init__[self, y0, y1, y2]:
self.y0 = y0
self.y1 = y1
self.y2 = y2
Từ Hướng dẫn tham khảo Python
Khai báo
1 lấy một chuỗi các biến thể hiện và dự trữ vừa đủ không gian trong mỗi thể hiện để giữ giá trị cho mỗi biến. Không gian được tiết kiệm vìdef g[x]: y0 = x + 1 y1 = x * 3 y2 = y0 ** y3 return {'y0': y0, 'y1': y1 ,'y2': y2}
__dict__
không được tạo cho từng phiên bản
Quyền mua. Sử dụng một lớp dữ liệu [Python 3. 7+]
Sử dụng Python3. 7, trả về một lớp với các phương thức đặc biệt được thêm tự động, cách gõ và các công cụ hữu ích khác
@dataclass
class Returnvalue:
y0: int
y1: float
y3: int
def total_cost[x]:
y0 = x + 1
y1 = x * 3
y2 = y0 ** y3
return ReturnValue[y0, y1, y2]
Quyền mua. Sử dụng một danh sách
Một gợi ý khác mà tôi đã bỏ qua đến từ Bill the Lizard
Đây là phương pháp ít yêu thích nhất của tôi mặc dù. Tôi cho rằng mình bị nhiễm độc khi tiếp xúc với Haskell, nhưng ý tưởng về các danh sách kiểu hỗn hợp luôn khiến tôi cảm thấy khó chịu. Trong ví dụ cụ thể này, danh sách không phải là loại hỗn hợp, nhưng nó có thể là
Một danh sách được sử dụng theo cách này thực sự không đạt được bất cứ điều gì đối với bộ dữ liệu theo như tôi có thể nói. Sự khác biệt thực sự duy nhất giữa danh sách và bộ dữ liệu trong Python là danh sách là , trong khi bộ dữ liệu thì không
Cá nhân tôi có xu hướng thực hiện các quy ước từ lập trình chức năng. sử dụng danh sách cho bất kỳ số phần tử nào cùng loại và bộ dữ liệu cho một số phần tử cố định thuộc loại được xác định trước
Hàm Python có thể trả về nhiều biến. Các biến này có thể được lưu trữ trực tiếp trong các biến. Một hàm không bắt buộc phải trả về một biến, nó có thể trả về 0, một, hai hoặc nhiều biến
Đây là thuộc tính riêng của Python, các ngôn ngữ lập trình khác như C++ hay Java mặc định không hỗ trợ tính năng này
khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python
Thí dụ
Giới thiệu
Các biến được định nghĩa trong hàm chỉ được biết trong hàm. Đó là do phạm vi của biến. Nói chung, đó không phải là vấn đề, trừ khi bạn muốn sử dụng đầu ra của hàm trong chương trình của mình
Trong trường hợp đó, bạn có thể trả về các biến từ một hàm. Trong trường hợp đơn giản nhất, bạn có thể trả về một biến duy nhất
1
2
3
def complexfunction[a,b]:
sum = a +b
return sum
Gọi hàm với hàm phức tạp [2,3] và đầu ra của nó có thể được sử dụng hoặc lưu
Nhưng nếu bạn có nhiều biến trong một hàm mà bạn muốn truy cập thì sao?
nhiều trở lại
Tạo một hàm getPerson[]. Như bạn đã biết một hàm có thể trả về một biến nhưng cũng có thể trả về nhiều biến