問題
環境:python3.8
代碼:在leetcode本地vs code運行時候報錯。NameError: name 'List' is not defined
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
pass
原因
經過查詢相關的資料,發現只需要在頭部導如typing
模塊就行了。
from typing import List
typing模塊
python是一門弱類型的語言,使用過程不用過多關注變量的類型,但是同時也帶來了問題,就是代碼的易讀性變差了,有時候自己都不知道傳入的是什么參數。因此在python3.5之后,引入了一個typing模塊,這個模塊可以很好解決這個問題。
函數接受並返回一個字符串,注釋像下面這樣:
def greeting(name: str) -> str:
return 'Hello ' + name
在函數 greeting 中,參數 name 預期是 str 類型,並且返回 str 類型。子類型允許作為參數。
typing模塊的作用:
- 類型檢查,防止運行時出現參數和返回值類型不對的情況
- 作為開發文檔附加說明,方便使用函數時傳入和返回正確的參數,利於開發效率
- 該模塊並不會實際影響到程序的運行,不會報錯,但是會有提示。
typing常用類型:
-
int,long,float: 整型,長整形,浮點型;
-
bool,str: 布爾型,字符串類型;
-
List, Tuple, Dict, Set:列表,元組,字典, 集合;
-
Iterable,Iterator:可迭代類型,迭代器類型;
-
Generator:生成器類型;
注意
:迭代器中的元素可能是多種類型,使用or或union操作符
參考:
https://www.jianshu.com/p/cec576f23667
https://docs.python.org/zh-cn/3.8/library/typing.html?highlight=typing#module-typing