【发布时间】:2020-10-25 04:20:58
【问题描述】:
例如:
def foo(bar: int = None):
pass
当我检查bar 的类型/注释时,pycharm 告诉我它是Optional[int]。
bar: int = None 看起来比bar: Optional[int] = None 更干净,尤其是当您有 10 多个参数时。
那么我可以直接省略Optional 吗? mypy 或其他 linter 之类的工具是否会将这种情况突出显示为错误?
看起来python本身不喜欢这个主意:
In [1]: from typing import Optional
In [2]: from inspect import signature
In [3]: def foo(a: int = None): pass
In [4]: def bar(a: Optional[int] = None): pass
In [5]: signature(foo).parameters['a'].annotation
Out[5]: int
In [6]: signature(bar).parameters['a'].annotation
Out[6]: typing.Union[int, NoneType]
【问题讨论】:
-
顺便说一句,如果你的函数需要 10+ 个参数,也许是时候考虑重构了。
标签: python python-3.x type-hinting mypy python-typing