這個(gè)被忽略的細(xì)節(jié),是編寫優(yōu)秀 Python 代碼的必經(jīng)之路
某個(gè)操作在Python編寫代碼中是可選的,意味著它不是必須的。但要想寫出好的Python代碼,你就必須這樣做。這就是 Python 中的類型提示。
圖片
Python 中數(shù)據(jù)類型的問題
Python是一種動態(tài)類型編程語言,變量的類型是在運(yùn)行時(shí)分配的,無需在賦值之前定義特定類型。
a = 5
變量 a 被賦值為 5,在此之前,無需聲明 a 存儲整數(shù),直接將 5 賦值給 a。
def add(a, b):
return a+b
print(add(4, 5)) # 9
print(add(4.0, 5.0)) # 9.0
print(add('hi', 'world')) # hiworld
print(add([1,2], [3,4])) # [1, 2, 3, 4]
add 接收兩個(gè)變量 a 和 b 并返回 a+b。但 a 和 b 應(yīng)該是什么數(shù)據(jù)類型呢?
- 如果我們輸入整數(shù),就會得到一個(gè)整數(shù)
- 如果傳入浮點(diǎn)數(shù),我們得到一個(gè)浮點(diǎn)數(shù)
- 如果傳入字符串,我們得到一個(gè)字符串
- 如果我們傳入列表,我們得到一個(gè)列表
Python并不在乎你傳入a和b的參數(shù)。如果出現(xiàn)錯(cuò)誤,你需要自己解決。盡管如此,類型提示可能會有所幫助。
類型提示介紹
在 Python 中,類型提示是可選的。如果不使用它們,Python 也能正常運(yùn)行。然而,對于其他開發(fā)者來說,類型提示能讓我們的代碼更易讀。
def add(a: int, b: int) -> int:
return a + b
在 a 和 b 后面加上 : int,在函數(shù)結(jié)尾 ) 后面加上 -> int 是類型提示,指示函數(shù)的參數(shù)和返回類型。
- a 應(yīng)該是整數(shù)
- b 也應(yīng)該是一個(gè)整數(shù)
- 函數(shù)的返回值也應(yīng)該是整數(shù)
類型提示并非強(qiáng)制數(shù)據(jù)類型,而是為了提示而存在的,這一點(diǎn)需要注意。
def add(a: int, b: int) -> int:
return a + b
print(add(4, 5)) # 9
print(add(4.0, 5.0)) # 9.0
print(add('hi', 'world')) # hiworld
我們可以在 a 和 b 中傳遞浮點(diǎn)數(shù)或字符串,Python 不限制,允許代碼運(yùn)行。類型提示的主要目的是指導(dǎo)其他開發(fā)者閱讀我們的代碼時(shí),明確數(shù)據(jù)類型應(yīng)當(dāng)為何。
類型提示的一些優(yōu)勢
- 開發(fā)人員能夠迅速確定函數(shù)或方法應(yīng)使用的數(shù)據(jù)類型
- 其他開發(fā)人員能夠快速了解函數(shù)或方法應(yīng)返回的數(shù)據(jù)類型
- 減少了變量數(shù)據(jù)類型的猜測和確認(rèn)的時(shí)間
- 提高了代碼的整體可讀性
盡管類型提示是可選的,但它是編寫優(yōu)秀可讀代碼的必備條件。
雖然僅僅使用類型提示并不能讓代碼變得優(yōu)秀
基礎(chǔ)類型提示
a: int = 5
# a should be an integer
變量類型提示
def avg(a:int, b:int) -> float:
return (a+b)/2
函數(shù)類型提示
- a和 b應(yīng)為整數(shù)
- 函數(shù)應(yīng)返回浮點(diǎn)數(shù)值
復(fù)雜類型的類型提示
但如果我們有一個(gè)整數(shù)列表呢?不用擔(dān)心,內(nèi)置的 typing 模塊提供了一些有用的類型提示功能。
from typing import List
def average(numbers: List[int]) -> float:
return sum(numbers)/len(numbers)
numbers 應(yīng)是一個(gè)整數(shù)列表。
from typing import Dict
def count(d: Dict[str, int]) -> int:
# stuff
d 應(yīng)該是一個(gè)字典,其中鍵是字符串,值是整數(shù)。
class Dog:
pass
from typing import List
def magic(dogs: List[Dog]) -> int:
# stuff
dogs 應(yīng)該是一個(gè)包含自定義 dog 對象的列表。
寫在最后
掌握類型提示并不困難,但它可以提高代碼的可讀性。在編寫優(yōu)秀的Python代碼時(shí),使用類型提示是至關(guān)重要的,特別是在開發(fā)大型企業(yè)應(yīng)用程序并需要與其他開發(fā)人員合作時(shí)。