在Python 3.5版本之前是沒有參數類型提示的,在3.5版本加入了這一項,這一項新的內容的優點在於幫助我們明確函數中每個參數的類型是什么,方便排查問題及項目交接后,下一任能夠看懂代碼,但是這一樣不像其他語言一樣強制檢查參數類型,這里只是為了提示,不影響代碼執行
具體文檔參考官網文檔: https://docs.python.org/3/library/typing.html
不加入類型提示
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 字典
# 單條消息
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) # 不支持