TLDR: Tương đương thành ngữ của void
chú thích kiểu trả về là -> None
.
def foo() -> None:
...
Điều này phù hợp với một hàm không có return
hoặc chỉ có một return
đánh giá trần None
.
def void_func(): # unannotated void function
pass
print(void()) # None
Bỏ qua kiểu trả về không có nghĩa là không có giá trị trả về. Theo PEP 484 :
Đối với một hàm đã chọn, chú thích mặc định cho các đối số và cho kiểu trả về là Any
.
Điều này có nghĩa là giá trị được coi là nhập động và hỗ trợ tĩnh bất kỳ hoạt động nào . Đó thực tế là ý nghĩa ngược lại của void
.
Gợi ý nhập trong Python không yêu cầu nghiêm ngặt các kiểu thực tế. Ví dụ, chú thích có thể sử dụng chuỗi các tên loại: Union[str, int]
, Union[str, 'int']
, 'Union[str, int]'
và các biến thể khác nhau là tương đương.
Tương tự, chú thích kiểu None
được coi là có nghĩa là "là của NoneType
". Điều này có thể được sử dụng không chỉ cho các loại trả lại, mặc dù bạn sẽ thấy nó thường xuyên nhất ở đó:
bar : None
def foo(baz: None) -> None:
return None
Điều này cũng áp dụng cho các loại chung chung. Ví dụ: bạn có thể sử dụng None
in Generator[int, None, None]
để chỉ ra trình tạo không nhận hoặc trả về giá trị.
Mặc dù PEP 484 gợi ý điều đó None
có nghĩa là type(None)
, bạn không nên sử dụng biểu mẫu sau một cách rõ ràng. Đặc điểm kỹ thuật gợi ý loại không bao gồm bất kỳ hình thức nào type(...)
. Về mặt kỹ thuật, đây là một biểu thức thời gian chạy và sự hỗ trợ của nó hoàn toàn tùy thuộc vào trình kiểm tra kiểu. Các mypy
dự án được xem xét để loại bỏ hỗ trợ cho type(None)
và loại bỏ nó từ 484 là tốt.
Hoặc có thể chúng ta nên cập nhật PEP 484 để không đề xuất rằng loại đó type(None)
có giá trị và None
là cách viết đúng duy nhất? Nên có một - và tốt nhất là chỉ một - cách hiển nhiên để làm điều đó, v.v.
--- JukkaL, ngày 18 tháng 5 năm 2018
void
kiểu trả về. Bất kỳ hàm nào (hoặc nhánh trong một hàm) không có hàm rõ ràngreturn
sẽ trả vềNone
. Tôi giả sử các OP hiểu rằng, nhận xét này chủ yếu là vì lợi ích của độc giả tương lai ...