Python代码参数类型提⽰(TypeHints)笔记
在Python 3.5版本之前是没有参数类型提⽰的,在3.5版本加⼊了这⼀项,这⼀项新的内容的优点在于帮助我们明确函数中每个参数的类型是什么,⽅便排查问题及项⽬交接后,下⼀任能够看懂代码,但是这⼀样不像其他语⾔⼀样强制检查参数类型,这⾥只是为了提⽰,不影响代码执⾏
具体⽂档参考官⽹⽂档:
不加⼊类型提⽰
from typing import List
def say(msg):
"""
msg: 消息
"""
return msg
加⼊类型提⽰后
from typing import List # 需要导⼊ typing 包
# 单条消息
def say(msg:str) -> str: # -> 函数返回值的类型
"""
msg: 消息
"""
return msg
# 多条消息
def say(msg:List) -> List: # -> 函数返回值的类型
"""
msg: 消息
"""
return msg
我们先看下不加⼊类型提⽰的代码,因为它所需要的参数msg没有类型注释,这个函数的返回值也没有类型注释,这样的话我们虽然可以正确执⾏,但是在理解的时候虽然知道他接收的是msg, 但是不知道这个是⼀条消息,还是多条消息,⽽我们在加⼊类型提⽰后,我们就知道这⾥接收的是单条消息,还是⼀个消息列表.
常⽤参数类型
Str 字符型
# 单条消息
def say(msg:str) -> str: # -> 函数返回值的类型
"""
msg: 消息
"""
return msg
say("hello world") # ⽀持
say(111) # 不⽀持
Int 整型
# 单条消息
def say(stuid:id) -> id: # -> 函数返回值的类型
"""
stuid: 学⽣id
"""
return stuid
say(20210001)
Float 浮点型
# 单条消息
def say(pi:float) -> float: # -> 函数返回值的类型
"""
pi: Π,3.1415926
"""
return pi
say(3.14)
Bool 布尔型
# 单条消息
def say(is_win:bool) -> bool: # -> 函数返回值的类型
"""
is_win: 是否赢了
"""
return pi
say(True)
List 列表
# 多条消息
def say(msg:List) -> List: # -> 函数返回值的类型
"""
msg: 消息
"""
return msg
say(["hello","world"])
Tuple 元组
# 多条消息
def say(stuid:Tuple) -> Tuple: # -> 函数返回值的类型
"""
stuid: 学⽣id
"""
return msg
say((2021001,2021002,2021003,))
Dict 字典
# 单条消息
union是什么类型
def say(stuinfo:Dict) -> Dict: # -> 函数返回值的类型
"""
stuinfo: 学⽣信息
"""
return stuinfo
say({"stu_name":"张三"})
New Type ⾃定义类型
from typing import NewType
UserName = NewType('UserName',str)
def say(name:UserName) -> UserName:# -> 函数返回值的类型
"""
name: 名字
"""
return name
say("张三") # ⽀持
say(111) # 不⽀持
Union 公⽤类型
from typing import Union
# Union[int,List] ⽀持int类型或者List类型,不⽀持其他类型的参数
def say(msg:Union[int,List]) -> Union[int,List]:# -> 函数返回值的类型
"""
msg: 消息
"""
return msg
say("hello") # 不⽀持(类型检查不⽀持,不影响代码执⾏)
say([111,222]) # ⽀持
say(111) # ⽀持
Optional
from typing import Optional
# Optional[str] 是对于存在默认的情况,若有默认值,则采⽤默认值,否则采⽤str类型def say(msg:Optional[str]=None) -> None:# -> 函数返回值的类型
"""
msg: 消息
"""
return msg
say("hello") # ⽀持
say() # ⽀持
say(111) # 不⽀持
复合类型
MsgType = List[str] # 声明⼀个列表套字符串的类型,例如:["hello"] def say(msg:MsgType) -> List:# -> 函数返回值的类型
"""
msg: 消息
"""
return msg
say(["hello","world"]) # ⽀持
say([111,222]) # 不⽀持
say(111) # 不⽀持