全面理解Python中的类型提示(Type Hints)

https://sikasjc.github.io/2018/07/14/type-hint-in-python/#runtime-code-evaluator

带默认值的参数

Python:Optional和带默认值的参数
在Python中的类或者函数中,若参数在声明时附带了它的默认值,则在实例化或调用时,可以选择性地为该参数赋值,例如:

  1. #默认值参数
  2. def foo_v1(a: int, b: int = 1):
  3. print(a + b)
  4. #未给b传入实参时,采用默认值
  5. foo_v1(2)
  6. # 输出
  7. # >>> 3
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7
  15. 8

注意: 规定默认值时,不一定要声明变量所属的类型(说到底Python中的对象、变量名只是一个指针或者说地址罢了),Python是一门动态语言,它总会在Python解释器进程运行的时候去动态地判定一个变量赋值的类型,而之所以在代码中声明静态类型则是为了减少人为错误而提供相应的类型或错误提示,但并不会影响Python的运行!

Typing.Optional类

可选类型,作用几乎和带默认值的参数等价,不同的是使用Optional会告诉你的IDE或者框架:这个参数除了给定的默认值外还可以是None,而且使用有些静态检查工具如mypy时,对 a: int =None这样类似的声明可能会提示报错,但使用a :Optional[int] = None不会。
以下为Python Documents对它的解释:Python中的类型提示(Type Hints) - 图1
Optional[X]等价于Union[X, None]
看个例子:

#Optional
from typing import Optional
def foo_v2(a: int, b: Optional[int] = None):
    if b:
        print(a + b)
    else:
        print("parameter b is a NoneType!")
#只传入a位置的实参
foo_v2(2)
# 输出
>>> parameter b is a NoneType!
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14

当你给Optional参数的默认值不为None时,看看Optional为IDE的带来的提示:
Python中的类型提示(Type Hints) - 图2
这意味着在这个函数中b是一个可选参数,并且提示你它的默认值可以为None。