Python - typing 模块 —— Optional

前言

typing 是在 python 3.5 才有的模块

 

前置学习

Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html

 

常用类型提示

https://www.cnblogs.com/poloyy/p/15150315.html

 

类型别名

https://www.cnblogs.com/poloyy/p/15153883.html 

 

NewType

https://www.cnblogs.com/poloyy/p/15153886.html

 

Callable

https://www.cnblogs.com/poloyy/p/15154008.html

 

TypeVar 泛型

https://www.cnblogs.com/poloyy/p/15154196.html

 

Any Type

https://www.cnblogs.com/poloyy/p/15158613.html

 

Union

https://www.cnblogs.com/poloyy/p/15170066.html

 

Optional

可选类型

 

和默认参数有什么不一样

  • 官方原话:可选参数具有默认值,具有默认值的可选参数不需要在其类型批注上使用 Optional,因为它是可选的
  • 不过 Optional 和默认参数其实没啥实质上的区别,只是写法不同
  • 使用 Optional 是为了让 IDE 识别到该参数有一个类型提示,可以传指定的类型和 None,且参数是可选非必传的
# 可选参数
def foo(arg: int = 0) -> None:
    ...


# 不传 arg 默认取 0
foo()

 

重点

  • Optional[int] 等价于 Union[int, None]
  • 意味着:既可以传指定的类型 int,也可以传 None

 

实际栗子

复制代码
def foo_func(arg: Optional[int] = None):
    print(arg)


foo_func()
foo_func(1)


# 输出结果
None
1
复制代码

 

使用默认参数的写法

复制代码
def foo_func(arg: int = None):
    print(arg)


foo_func()
foo_func(1)


# 输出结果
None
1
复制代码

这种写法,Pycharm 并不会 warning

 

重点

Optional[] 里面只能写一个数据类型

# 正确
Optional[str]
Optional[List[str]]
Optional[Dict[str, Any]]

# 错误
Optional[str, int]
Optional[Union[str, int, float]]

 

  

posted @   小菠萝测试笔记  阅读(18317)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-08-21 Jmeter系列(56)- 详解 Weighted Switch Controller 权重控制器
点击右上角即可分享
微信分享提示