TLDR: Tương đương thành ngữ của voidchú 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ó returnhoặ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 Nonein 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 đó Nonecó 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 mypydự á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à Nonelà 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
voidkiể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àngreturnsẽ 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 ...