從零開(kāi)始詳解Python的變量類型注解
我發(fā)現(xiàn)很多初學(xué)者在使用變量時(shí)很隨意,這容易導(dǎo)致各種bug。Python的維護(hù)者們?cè)缇桶l(fā)現(xiàn)了這個(gè)問(wèn)題,于是在 Python 3.6 版本引入了PEP 526,支持變量類型注解,不過(guò)集合類型注解(需要從typing導(dǎo)入)即:from typing import List, Dict, Set。Python 3.9 開(kāi)始可以使用內(nèi)置集合類型,無(wú)需typing導(dǎo)入,一直發(fā)展到現(xiàn)在Pyhon3.14的最新版,也一直支持這項(xiàng)功能。
今天,我來(lái)教大家如何在定義變量時(shí)就明確類型,讓代碼更加通俗易懂、規(guī)范可靠、維護(hù)方便。
一、為什么要在定義時(shí)明確類型
先看一個(gè)常見(jiàn)問(wèn)題:
# 不明確的寫法 age = "18" # 看起來(lái)是數(shù)字,其實(shí)是字符串 result = age + 5 # 這里會(huì)出錯(cuò)!
如果一開(kāi)始就明確age的類型,就可以有效減少這種錯(cuò)誤:
# 明確的寫法 age: int = 18 # 明確告訴Python:age是整數(shù) result = age + 5 # 正確:18 + 5 = 23
好處:
- 代碼更容易理解
- 避免類型錯(cuò)誤
- IDE能給出更好的提示
二、基礎(chǔ)變量的類型定義
數(shù)字類型
# 整數(shù) student_age: int = 18 student_count: int = 45 # 小數(shù) student_height: float = 175.5 average_score: float = 87.5
文本類型
# 字符串 student_name: str = "小明" school_name: str = "第一中學(xué)"
布爾類型
# 布爾值 is_student: bool = True is_graduated: bool = False
三、列表的類型定義
列表是存放多個(gè)數(shù)據(jù)的有序集合,可以重復(fù)元素。在定義列表時(shí)也可以通過(guò):變量名:list = [元素1,元素2,元素3...] 這樣的方式來(lái)定義。
數(shù)字列表
# 整數(shù)列表 score_list: list = [90, 85, 78, 92] age_list: list = [18, 19, 17, 18] # 小數(shù)列表 temperature_list: list = [36.5, 37.0, 36.8] price_list: list = [12.5, 8.9, 15.0]
字符串列表
# 字符串列表 student_list: list = ["小明", "小紅", "小剛"] subject_list: list = ["數(shù)學(xué)", "語(yǔ)文", "英語(yǔ)"]
四、元組的類型定義
元組是不可變的有序序列,一旦創(chuàng)建就不能修改。以下是常用于固定數(shù)據(jù)組合和配置信息的兩個(gè)實(shí)例。
固定數(shù)據(jù)組合
# 學(xué)生基本信息(姓名,年齡,身高)
student_info: tuple = ("小明", 18, 175.5)
coordinates: tuple = (39.9, 116.4) # 經(jīng)緯度
# 顏色RGB值
color_red: tuple = (255, 0, 0)
color_white: tuple = (255, 255, 255)配置信息
# 數(shù)據(jù)庫(kù)配置(主機(jī),端口,用戶名,密碼)
db_config: tuple = ("localhost", 3306, "admin", "password")
app_settings: tuple = ("MyApp", "1.0.0", True)五、集合的類型定義
集合是無(wú)序的不重復(fù)元素序列,適合去重和集合運(yùn)算。我們通過(guò)集合變量名:set = {元素1,元素2...}來(lái)實(shí)現(xiàn)。
去重?cái)?shù)據(jù)
# 學(xué)生ID集合(自動(dòng)去重)
student_ids: set = {1001, 1002, 1003, 1001, 1004}
unique_tags: set = {"python", "programming", "tutorial", "python"}
# 課程標(biāo)簽
course_tags: set = {"基礎(chǔ)", "進(jìn)階", "實(shí)戰(zhàn)", "項(xiàng)目"}權(quán)限集合
# 用戶權(quán)限
user_permissions: set = {"read", "write", "execute"}
admin_roles: set = {"super_admin", "content_admin", "user_admin"}六、字典的類型定義
字典用來(lái)存儲(chǔ)"鍵值對(duì)",就像現(xiàn)實(shí)中的字典一樣??梢酝ㄟ^(guò)字典變量名:dict = {鍵名:鍵值}這種形式來(lái)定義。
學(xué)生信息字典
# 定義學(xué)生信息
student: dict = {
"name": "小明",
"age": 18,
"score": 95,
"is_monitor": True
}
class_info: dict = {
"class_name": "三年級(jí)二班",
"student_count": 45,
"teacher": "張老師"
}成績(jī)字典
# 各科成績(jī)
score_dict: dict = {
"math": 95,
"chinese": 88,
"english": 92,
"physics": 85
}七、各種數(shù)據(jù)結(jié)構(gòu)的對(duì)比
| 類型 | 特點(diǎn) | 使用場(chǎng)景 | 格式 |
|---|---|---|---|
| 字符(str) | 有序、可重復(fù)、不可修改 | 學(xué)生姓名 | 變量名: str = 值 |
| 列表(list) | 有序、可重復(fù)、可修改 | 學(xué)生名單、成績(jī)列表 | 變量名: list = 值 |
| 元組(tuple) | 有序、可重復(fù)、不可修改 | 坐標(biāo)、配置信息 | 變量名: tuple = 值 |
| 集合(set) | 無(wú)序、不重復(fù) | 標(biāo)簽、權(quán)限、去重?cái)?shù)據(jù) | 變量名: set = 值 |
| 字典(dict) | 鍵值對(duì)、無(wú)序 | 學(xué)生信息、配置參數(shù) | 變量名: dict = 值 |
八、實(shí)際應(yīng)用案例
讓我們用一個(gè)完整的例子來(lái)看看類型定義的實(shí)際價(jià)值,定義時(shí)雖然有點(diǎn)兒麻煩,但是后期引用時(shí)就非常的方便,而且能夠更好地與其它編程語(yǔ)言兼容:
# 基礎(chǔ)信息
class_name: str = "三年級(jí)二班"
student_count: int = 30
average_score: float = 87.5
is_excellent_class: bool = True
# 列表 - 有序可重復(fù)數(shù)據(jù)
student_list: list = ["小明", "小紅", "小剛", "小麗"]
score_list: list = [95, 92, 88, 90, 85]
# 元組 - 不可變配置數(shù)據(jù)
class_config: tuple = (2024, "A班", "張老師")
color_scheme: tuple = (255, 255, 255) # 白色
# 集合 - 不重復(fù)數(shù)據(jù)
subject_set: set = {"數(shù)學(xué)", "語(yǔ)文", "英語(yǔ)", "物理", "數(shù)學(xué)"} # 自動(dòng)去重
permission_set: set = {"read", "write"}
# 字典 - 鍵值對(duì)數(shù)據(jù)
student_dict: dict = {
"小明": {"age": 18, "score": 95},
"小紅": {"age": 17, "score": 92}
}
subject_average: dict = {
"math": 89.5,
"chinese": 87.0,
"english": 91.2
}
# 使用這些變量
print(f"班級(jí):{class_name}")
print(f"學(xué)生名單:{student_list}")
print(f"唯一科目:{subject_set}")
print(f"班級(jí)配置:{class_config}")
# 集合的去重特性演示
duplicate_numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers: set = set(duplicate_numbers)
print(f"去重前:{duplicate_numbers}")
print(f"去重后:{unique_numbers}")九、類型定義的好處
1. 代碼更清晰,便于識(shí)別類型
# 沒(méi)有類型定義 - 需要猜
data1 = ["小明", 18, 95]
data2 = (39.9, 116.4)
data3 = {1, 2, 3}
# 有類型定義 - 一目了然
student_data: list = ["小明", 18, 95]
coordinates: tuple = (39.9, 116.4)
number_set: set = {1, 2, 3}2. 避免錯(cuò)誤,減少變量類型錯(cuò)誤
# 元組不可修改的特性
colors: tuple = ("red", "green", "blue")
# colors[0] = "yellow" # 這會(huì)報(bào)錯(cuò)!
# 正確做法是創(chuàng)建新的元組
new_colors: tuple = ("yellow", "green", "blue")3. 利用集合特性
# 自動(dòng)去重
tags: set = {"python", "編程", "教程", "python", "編程"}
print(tags) # 輸出:{'python', '編程', '教程'} 自動(dòng)去重十、練習(xí)時(shí)間
學(xué)習(xí)了如何規(guī)范地自定義變量,下面我們根據(jù)下面幾道題來(lái)鞏固一下已經(jīng)學(xué)習(xí)的知識(shí)吧。
請(qǐng)?jiān)囍x以下變量(記得加上類型):
- 你的個(gè)人信息(使用字典)
- 你的愛(ài)好列表(使用列表)
- 你的技能集合(使用集合,自動(dòng)去重)
- 你的出生日期(使用元組)
示例答案:
# 個(gè)人信息字典
personal_info: dict = {
"name": "張三",
"age": 20,
"city": "北京"
}
# 愛(ài)好列表
hobbies: list = ["讀書", "編程", "運(yùn)動(dòng)", "音樂(lè)"]
# 技能集合(自動(dòng)去重)
skills: set = {"Python", "Java", "SQL", "Python"} # 結(jié)果:{'Python', 'Java', 'SQL'}
# 出生日期元組(年,月,日)
birth_date: tuple = (2000, 5, 15)總結(jié)
1.類型注解是可選但推薦的,它可以提高代碼質(zhì)量, 請(qǐng)記住這幾個(gè)要點(diǎn):
- 基礎(chǔ)類型:int, float, str, bool
- 列表(list):有序可重復(fù),用方括號(hào) []
- 元組(tuple):有序不可變,用圓括號(hào) ()
- 集合(set):無(wú)序不重復(fù),用花括號(hào) {}
- 字典(dict):鍵值對(duì),用花括號(hào) {key: value}
2. 類型注解方法是:變量名: 類型 = 值, 記住這個(gè)模板,不同類型的數(shù)據(jù)可以依次類推。
3. 從簡(jiǎn)單開(kāi)始 - 先掌握基礎(chǔ)類型,再學(xué)習(xí)集合類型數(shù)據(jù)。
4. 注意版本兼容性 - 根據(jù)Python版本選擇合適的寫法,Python3.9以上版本建議使用。
5. 保持一致性 - 在整個(gè)項(xiàng)目中保持統(tǒng)一的注解風(fēng)格,便于識(shí)別bug和程序維護(hù)。
到此這篇關(guān)于從零開(kāi)始詳解Python的變量類型注解的文章就介紹到這了,更多相關(guān)Python變量類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)抓取百度搜索結(jié)果頁(yè)的網(wǎng)站標(biāo)題信息
這篇文章主要介紹了Python實(shí)現(xiàn)抓取百度搜索結(jié)果頁(yè)的網(wǎng)站標(biāo)題信息,本文使用BeautifulSoup來(lái)解析HTML,需要的朋友可以參考下2015-01-01
Python爬蟲(chóng)之正則表達(dá)式的使用教程詳解
本文實(shí)例代碼相結(jié)合給大家詳細(xì)介紹了Python爬蟲(chóng)之正則表達(dá)式的使用,包括參數(shù)介紹,最常規(guī)的匹配,匹配目標(biāo),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-10-10
Python Pytorch gpu 分析環(huán)境配置
Pytorch是目前最火的深度學(xué)習(xí)框架之一,目前也支持了pytorch的GPU加速,所以我就想著,在這兩個(gè)電腦上裝個(gè)Pytorch,這篇文章主要介紹了Python Pytorch(gpu)分析環(huán)境配置,需要的朋友可以參考下2023-04-04
從原理到生產(chǎn)部署解析Python多服務(wù)器監(jiān)控告警系統(tǒng)開(kāi)發(fā)
這篇文章將從原理到生產(chǎn)部署帶大家深入解析Python多服務(wù)器監(jiān)控告警系統(tǒng)開(kāi)發(fā)過(guò)程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-09-09
python OpenCV學(xué)習(xí)筆記直方圖反向投影的實(shí)現(xiàn)
這篇文章主要介紹了python OpenCV學(xué)習(xí)筆記直方圖反向投影的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
python使用Turtle庫(kù)繪制動(dòng)態(tài)鐘表
這篇文章主要為大家詳細(xì)介紹了python使用Turtle庫(kù)繪制動(dòng)態(tài)鐘表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
python基礎(chǔ)學(xué)習(xí)之生成器與文件系統(tǒng)知識(shí)總結(jié)
本文是參考《python數(shù)據(jù)分析》的附錄對(duì)生成器和文件系統(tǒng)結(jié)合案例的一個(gè)簡(jiǎn)單回顧,文中對(duì)python生成器與文件系統(tǒng)作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
在Pycharm中修改文件默認(rèn)打開(kāi)方式的方法
今天小編就為大家分享一篇在Pycharm中修改文件默認(rèn)打開(kāi)方式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01

