Python類型提示Type Hints示例詳解
為什么會有類型提示
Python是一種動態(tài)類型語言,這意味著我們在編寫代碼的時候更為自由,運(yùn)行時不需要指定變量類型
但是與此同時 IDE 無法像靜態(tài)類型語言那樣分析代碼,及時給我們相應(yīng)的提示,比如字符串的 split 方法
def split_str(s):
strs = s.split(",")
由于不知道參數(shù) s 是什么類型,所以當(dāng)你敲 s. 的時候不會出現(xiàn) split 的語法提示
解決上述問題,類型提示
Python 3.6 新增了兩個特性 PEP 484 和 PEP 526
- PEP 484:https://www.python.org/dev/peps/pep-0484/
- PEP 526:https://www.python.org/dev/peps/pep-0526/
幫助 IDE 為我們提供更智能的提示
這些新特性不會影響語言本身,只是增加一點(diǎn)提示
類型提示分類
主要分兩個
- 變量提示:PEP 526 特性加的
- 函數(shù)參數(shù)提示:PEP 484 特性加的
變量類型提示
沒有使用類型提示
想說明變量的數(shù)據(jù)類型只能通過注釋
# 'primes' is a list of integers
primes = [] # type: List[int]
# 'captain' is a string (Note: initial value is a problem)
captain = ... # type: str
class Starship:
# 'stats' is a class variable
stats = {} # type: Dict[str, int]
使用了類型提示
from typing import List, ClassVar, Dict
# int 變量,默認(rèn)值為 0
num: int = 0
# bool 變量,默認(rèn)值為 True
bool_var: bool = True
# 字典變量,默認(rèn)為空
dict_var: Dict = {}
# 列表變量,且列表元素為 int
primes: List[int] = []
class Starship:
# 類變量,字典類型,鍵-字符串,值-整型
stats: ClassVar[Dict[str, int]] = {}
# 實(shí)例變量,標(biāo)注了是一個整型
num: int
這里會用到 typing 模塊,后面會再展開詳解
假設(shè)變量標(biāo)注了類型,傳錯了會報錯嗎?
from typing import List
# int 變量,默認(rèn)值為 0
num: int = 0
# bool 變量,默認(rèn)值為 True
bool_var: bool = True
# 字典變量,默認(rèn)為空
dict_var: Dict = {}
# 列表變量,且列表元素為 int
primes: List[int] = []
num = "123"
bool_var = 123
dict_var = []
primes = ["1", "2"]
print(num, bool_var, dict_var, primes)
# 輸出結(jié)果
123 123 [] ['1', '2']
它并不會報錯,但是會有 warning,是 IDE 的智能語法提示

所以,這個類型提示更像是一個規(guī)范約束,并不是一個語法限制
變量類型提示-元組打包
# 正常的元組打包 a = 1, 2, 3 # 加上類型提示的元組打包 t: Tuple[int, ...] = (1, 2, 3) print(t) t = 1, 2, 3 print(t) # py3.8+ 才有的寫法 t: Tuple[int, ...] = 1, 2, 3 print(t) t = 1, 2, 3 print(t) # 輸出結(jié)果 (1, 2, 3) (1, 2, 3) (1, 2, 3) (1, 2, 3)
為什么要加 ...

不加的話,元組打包的時候,會有一個 warning 提示
變量類型提示-元組解包
# 正常元組解包
message = (1, 2, 3)
a, b, c = message
print(a, b, c) # 輸出 1 2 3
# 加上類型提示的元組解包
header: str
kind: int
body: Optional[List[str]]
# 不會 warning 的栗子
header, kind, body = ("str", 123, ["1", "2", "3"])
# 會提示 warning 的栗子
header, kind, body = (123, 123, ["1", "2", "3"])
Optional 會在后面講 typing 的時候詳解
在類里面使用
class BasicStarship:
captain: str = 'Picard' # 實(shí)例變量,有默認(rèn)值
damage: int # 實(shí)例變量,沒有默認(rèn)值
stats: ClassVar[Dict[str, int]] = {} # 類變量,有默認(rèn)值
ClassVar
- 是 typing 模塊的一個特殊類
- 它向靜態(tài)類型檢查器指示不應(yīng)在類實(shí)例上設(shè)置此變量
函數(shù)參數(shù)類型提示
不僅提供了函數(shù)參數(shù)列表的類型提示,也提供了函數(shù)返回的類型提示
栗子一
# 參數(shù) name 類型提示 str,而函數(shù)返回值類型提示也是 str
def greeting(name: str) -> str:
return 'Hello ' + name
栗子二
def greeting(name: str, obj: Dict[str, List[int]]) -> None:
print(name, obj)
總結(jié)
到此這篇關(guān)于Python類型提示Type Hints的文章就介紹到這了,更多相關(guān)Python類型提示Type Hints內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas重置索引標(biāo)簽的實(shí)現(xiàn)示例
在使用Pandas進(jìn)行數(shù)據(jù)處理時,有時候我們可能會需要對數(shù)據(jù)進(jìn)行重置索引的操作,本文主要介紹了pandas重置索引標(biāo)簽的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-04-04
Python異步爬蟲requests和aiohttp中代理IP的使用
本文主要介紹了Python異步爬蟲requests和aiohttp中代理IP的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
python環(huán)境路徑配置以及命令行運(yùn)行腳本
這篇文章主要為大家詳細(xì)介紹了python環(huán)境路徑配置以及命令行運(yùn)行腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04
python利用platform模塊獲取系統(tǒng)信息
這篇文章主要介紹了python利用platform模塊獲取系統(tǒng)信息,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-10-10
Python實(shí)現(xiàn)自動化批量調(diào)整Word樣式
在日常工作中,處理大量的Word文檔是一個常見的任務(wù),尤其是需要批量修改文檔的樣式時,本文為大家介紹了如何使用Python實(shí)現(xiàn)自動化批量調(diào)整Word樣式,需要的可以參考下2024-12-12
Python趣味挑戰(zhàn)之教你用pygame畫進(jìn)度條
pygame四種方法教會你畫進(jìn)度條,其實(shí)也不難,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05

