代码之家  ›  专栏  ›  技术社区  ›  lmiguelvargasf

Python 3.10+:可选[类型]或类型|无

  •  0
  • lmiguelvargasf  · 技术社区  · 3 年前

    既然Python3.10已经发布,那么在指示参数或返回值可能是可选的(即可以是可选的)时,是否有任何偏好 None . 那么什么是首选:

    备选案文1:

    def f(parameter: Optional[int]) -> Optional[str]:
    

    def f(parameter: int | None) -> str | None:
    

    另外,两人之间是否有任何偏好 Type | None None | Type ?

    3 回复  |  直到 3 年前
        1
  •  4
  •   jkr    3 年前

    PEP 604 在规范部分介绍这些主题。

    现存的 typing.Union |

    int | str == typing.Union[int, str]
    

    工会中项目的顺序不应影响平等。

    (int | str) == (str | int)
    (int | str | float) == typing.Union[str, float, int]
    

    None | t == typing.Optional[t]
    

    @jonrsharpe comments , Union Optional 未弃用,因此 |


    Type | None 优先于 Optional[Type]

    enter image description here

        2
  •  3
  •   joel DeyaEldeen    3 年前

    我个人会同意 选择2 继续前进。

    另外,我只是想添加它以提高认识,但是Python 3.7+可以使用 __future__

    from __future__ import annotations
    
    
    def f(parameter: int | None) -> str | None:
        ...
    
        3
  •  1
  •   ti7    3 年前

    非权威,但我希望 Optional

    • 提供了一个默认值(可能是 None )
    • 没有一个 打电话的人通过是不寻常的

    Union | 使用时

    • 没有默认值和/或默认值为 没有一个

    How do I add default parameters to functions when using type hinting?