Tôi có một hàm trong python có thể trả về a bool
hoặc a list
. Có cách nào để xác định loại trả về bằng cách sử dụng gợi ý loại.
Ví dụ, đây có phải là cách chính xác để làm điều đó?
def foo(id) -> list or bool:
...
Tôi có một hàm trong python có thể trả về a bool
hoặc a list
. Có cách nào để xác định loại trả về bằng cách sử dụng gợi ý loại.
Ví dụ, đây có phải là cách chính xác để làm điều đó?
def foo(id) -> list or bool:
...
Câu trả lời:
Từ tài liệu
lớp học
typing.Union
Loại liên minh; Liên minh [X, Y] có nghĩa là X hoặc Y.
Do đó cách thích hợp để biểu thị nhiều loại dữ liệu trả về là
from typing import Union
def foo(client_id: str) -> Union[list,bool]
Nhưng lưu ý rằng gõ không được thực thi. Python tiếp tục là một ngôn ngữ được gõ động. Cú pháp chú thích đã được phát triển để giúp đỡ trong quá trình phát triển mã trước khi được phát hành vào sản xuất. Như PEP 484 tuyên bố, "không có kiểm tra kiểu nào xảy ra trong thời gian chạy."
>>> def foo(a:str) -> list:
... return("Works")
...
>>> foo(1)
'Works'
Như bạn có thể thấy tôi đang truyền một giá trị int và trả về một str. Tuy nhiên, __annotations__
sẽ được đặt thành các giá trị tương ứng.
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
Vui lòng xem qua PEP 483 để biết thêm về gợi ý Loại. Xem thêm Gợi ý loại trong Python 3.5 là gì?
Vui lòng lưu ý rằng điều này chỉ có sẵn cho Python 3.5 trở lên. Điều này được đề cập rõ ràng trong PEP 484 .
Tuyên bố def foo(client_id: str) -> list or bool:
khi được đánh giá là tương đương
def foo(client_id: str) -> list:
và do đó sẽ không làm những gì bạn muốn.
Cách riêng để mô tả gợi ý loại "A hoặc B" là Liên minh (nhờ Bhargav Rao):
def foo(client_id: str) -> Union[list, bool]:
Tôi không muốn trở thành anh chàng "Tại sao bạn lại muốn làm điều này", nhưng có lẽ có 2 loại trả về không phải là điều bạn muốn:
Nếu bạn muốn trả về một bool để chỉ ra một số trường hợp lỗi đặc biệt, hãy xem xét sử dụng Ngoại lệ thay thế. Nếu bạn muốn trả về một bool như một giá trị đặc biệt, có thể một danh sách trống sẽ là một đại diện tốt. Bạn cũng có thể chỉ ra rằng None
có thể được trả lại vớiOptional[list]
Trong trường hợp bất kỳ ai hạ cánh ở đây để tìm kiếm "cách chỉ định loại nhiều giá trị trả về?", Hãy sử dụng Tuple[type_value1, ..., type_valueN]
from typing import Tuple
def f() -> Tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b
Thông tin thêm: https://code-examples.net/vi/q/2651e60