Python void return type annotation

前端 未结 2 775
悲哀的现实
悲哀的现实 2021-01-31 06:33

In python 3.x, it is common to use return type annotation of a function, such as:

def foo() -> str:
    return \"bar\"

What is the correct a

2条回答
  •  北恋
    北恋 (楼主)
    2021-01-31 07:34

    TLDR: The idiomatic equivalent of a void return type annotation is -> None.

    def foo() -> None:
        ...
    

    This matches that a function without return or just a bare return evaluates to None.

    def void_func():  # unannotated void function
        pass
    
    print(void())  # None
    

    Omitting the return type does not mean that there is no return value. As per PEP 484:

    For a checked function, the default annotation for arguments and for the return type is Any.

    This means the value is considered dynamically typed and statically supports any operation. That is practically the opposite meaning of void.


    Type hinting in Python does not strictly require actual types. For example, annotations may use strings of type names: Union[str, int], Union[str, 'int'], 'Union[str, int]' and various variants are equivalent.

    Similarly, the type annotation None is considered to mean "is of NoneType". This can be used not just for return types, though you will see it most often there:

    bar : None
    
    def foo(baz: None) -> None:
        return None
    

    This also applies to generic types. For example, you can use None in Generator[int, None, None] to indicate a generator does not take or return values.


    Even though PEP 484 suggests that None means type(None), you should not use the latter form explicitly. The type hinting specification does not include any form of type(...). This is technically a runtime expression, and its support is entirely up to the type checker. The mypy project is considering to remove support for type(None) and remove it from 484 as well.

    Or maybe we should update PEP 484 to not suggest that type(None) is valid as a type, and None is the only correct spelling? There should one -- and preferably only one -- obvious way to do it etc.

    --- JukkaL, 18 May 2018

提交回复
热议问题