【python】typing用法

一、基礎類型提示

1. 基本類型注解

# 變量類型注解
age: int = 30
name: str = "Alice"
is_student: bool = False
height: float = 1.75

2. 函數注解

def greet(name: str, age: int) -> str:return f"Hello {name}, you are {age} years old!"

二、組合類型

1. 聯合類型(Union)

from typing import Union# value 可以是整數或浮點數
def format_number(value: Union[int, float]) -> str:return f"{value:.2f}"# 或者使用簡寫 |(Python 3.10+)
def format_number(value: int | float) -> str:return f"{value:.2f}"

2. 可選類型(Optional)

from typing import Optionaldef find_user(id: int) -> Optional[str]:# 返回值可以是字符串或 Nonereturn user_db.get(id, None)

三、容器類型

1. 列表(List)

from typing import List# 整數列表
scores: List[int] = [90, 85, 95]# 混合類型列表(不推薦,盡量避免)
values: List[Union[int, str]] = [1, "two", 3]

2. 元組(Tuple)

from typing import Tuple# 固定結構元組
point: Tuple[float, float] = (3.5, 7.2)# 可變長度元組
points: Tuple[float, ...] = (1.0, 2.5, 3.7)

3. 字典(Dict)

from typing import Dict# 鍵為字符串,值為整數的字典
student_grades: Dict[str, int] = {"Alice": 90, "Bob": 85}# 復雜字典
person: Dict[str, Union[str, int]] = {"name": "Alice", "age": 30}

四、特殊類型

1. 字面值類型(Literal)

from typing import Literal# 參數只能是特定值
def set_direction(direction: Literal["up", "down", "left", "right"]) -> None:print(f"Moving {direction}")set_direction("up")    # 正確
set_direction("north")  # 類型檢查錯誤
# 注意:Python 的類型注解(包括 Literal)只對類型檢查工具有效,不會影響實際運行,所以兩個輸出都正常。

2. 類型別名(TypeAlias)

# 創建類型別名(Python 3.10+)
from typing import TypeAliasCoordinate: TypeAlias = Tuple[float, float]def distance(a: Coordinate, b: Coordinate) -> float:return ((a[0]-b[0])**2 + (a[1]-b[1])**2)**0.5

五、泛型與高級類型

1. 可調用對象(Callable)

from typing import Callable# 簡單函數類型
Adder: Callable[[int, int], int] = lambda x, y: x + ydef add(x: int, y: int) -> int:return x + ydef apply_twice(func: Callable[[int, int], int], x: int, y: int) -> int:return func(func(x, y), func(x, y))print(apply_twice(add, 2, 3)) # Output: 10
def create_adder(n: int) -> Callable[[int, int], int]:def add(x: int, y: int) -> int:return x + y + nreturn addprint(create_adder(5)(2, 3)) # Output: 10

2. Iterable, Sequence, Mapping

from typing import Iterable, Sequence, Mapping# Iterable(可迭代對象)
def sum_all(values: Iterable[int]) -> int:return sum(values)# Sequence(支持索引的集合)
def get_middle(items: Sequence[str]) -> str:return items[len(items)//2]# Mapping(類似字典的結構)
def find_value(data: Mapping[str, int], key: str) -> int:return data.get(key, 0)

六、結構化類型

1. TypedDict(類型化字典)

from typing import TypedDict, Listclass Person(TypedDict):name: strage: inthobbies: List[str]alice: Person = {"name": "Alice","age": 30,"hobbies": ["reading", "hiking"]
}

2. NamedTuple(命名元組)

from typing import NamedTupleclass Point(NamedTuple):x: floaty: floatz: float = 0.0  # 默認值p = Point(1.5, 2.5)
print(p.x, p.y)  # 1.5 2.5

七、動態類型相關

1. Any(任意類型)

from typing import Anydef process_data(data: Any) -> Any:# 此函數接受和返回任何類型的值if isinstance(data, list):return data[0]return data

2. Type(類類型)

from typing import Type, TypeVarT = TypeVar('T')def create_instance(cls: Type[T]) -> T:return cls()class Widget: pass
widget = create_instance(Widget)

十、Python 3.10+ 改進

Python 3.10 引入了更簡潔的類型提示語法:

# 聯合類型簡化
def format_value(value: int | float | str) -> str:return str(value)# 類型別名簡化
type Coordinate = tuple[float, float]# 參數化泛型
def first(items: list[T]) -> T:return items[0]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909728.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909728.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909728.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

web前端開發核心基礎:Html結構分析,head,body,不同標簽的作用

前端技術協同關系 協作流程:HTML構建頁面框架—>css美化樣式(選擇器屬性)—>JavaScript實現交互(類似于python的腳本語言)擴展基礎:在上面三項基礎上學習Vue\React、構建工具WePack和瀏覽器工作原理…

精益數據分析(105/126):移動應用核心指標解析與用戶分層營收策略

精益數據分析(105/126):移動應用核心指標解析與用戶分層營收策略 在移動應用市場競爭白熱化的今天,單純追求下載量已無法保證商業成功,精細化運營核心指標成為盈利關鍵。本文將深入解析每日活躍用戶平均營收&#xff…

被CC攻擊了,對服務器有什么影響?

博客正文: 最近,不少網站管理員和運維人員反映遭遇了CC攻擊,導致服務器性能異常甚至癱瘓。那么,CC攻擊究竟會對服務器造成哪些影響?本文將為你簡要解析CC攻擊的原理及其帶來的危害,幫助你更好地理解并應對…

Tensorflow安裝出現dependency conflict錯誤

Python版本: 3.11.4 pip版本已升到最新 電腦上有mac的原裝Python2.x,我裝的3.11.4,還有個什么依賴的3.9 運行 pip3 install tensorflow 出現類似以下錯誤 (我報錯的是另一個不是tensorflow—estimator,但基本就是…

2025年HTTP半開與錯誤攻擊防御指南:原理拆解與實戰防護

你以為限流就能防住HTTP攻擊?黑客用協議畸形包AI調度正在撕裂傳統防線! 一、HTTP半開攻擊:慢速絞殺服務器資源 ? 攻擊原理剖析 HTTP半開攻擊(如Slowloris)是一種應用層DoS攻擊,通過建立大量半開連接耗盡…

Mybatis(XML映射文件、動態SQL)

目錄 基礎操作 準備: 刪除: 新增: 更新: 查詢: 條件查詢: XML映射文件 動態SQL if foreach sql&include 基礎操作 準備: 準備數據庫表 創建一個新的springboot工程&#xff0…

python校園拼團系統

目錄 技術棧介紹具體實現截圖系統設計研究方法:設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理,難度適中&#xf…

多模態大語言模型arxiv論文略讀(127)

When SAM2 Meets Video Camouflaged Object Segmentation: A Comprehensive Evaluation and Adaptation ?? 論文標題:When SAM2 Meets Video Camouflaged Object Segmentation: A Comprehensive Evaluation and Adaptation ?? 論文作者:Yuli Zhou, …

劍指offer32_二叉搜索樹的后序遍歷序列

二叉搜索樹的后序遍歷序列 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。 如果是則返回true,否則返回false。 假設輸入的數組的任意兩個數字都互不相同。 數據范圍 數組長度 [ 0 , 1000 ] [0,1000] [0,1000]。 樣例 輸入&…

《仿盒馬》app開發技術分享-- 訂單結合優惠券結算(端云一體)

技術棧 Appgallery connect 開發準備 上一節我們已經實現了優惠券的選擇,并且成功的把券后的價格也展示給用戶,不能使用的優惠券我們也用友好的方式告知用戶,這一節我們來實現優惠券內容的下一步,優惠券內容結合訂單進行結算提…

Python+Selenium+Pytest+POM自動化測試框架封裝

🍅 點擊文末小卡片 ,免費獲取軟件測試全套資料,資料在手,漲薪更快 1、測試框架簡介 1)測試框架的優點 代碼復用率高,如果不使用框架的話,代碼會顯得很冗余。可以組裝日志、報告、郵件等一些…

宋代大模型:智能重構下的文明再發現

引言:當汴京城遇見生成式AI 一幅動態的《清明上河圖》正通過全息投影技術演繹汴京城的市井百態。這個虛實交融的場景,恰似宋代大模型技術的隱喻——以人工智能為紐帶,連接起東京夢華的繁盛圖景與數字時代的文明重構。作為人工智能與歷史學交…

K-means++:讓K-means“聰明”地選擇初始中心點

大家好!歡迎來到我的技術分享博客~ 👋 在前兩篇博客中,我們深入探討了經典的 K-means 算法 以及它的優化方案 Canopy K-means。如果你還沒有看過,強烈建議先回顧一下,因為今天的主題 K-means 和它們有著千絲萬縷的聯系…

Langchain學習筆記(1)——如何調用Huggingface的模型并實現實時返回生成結果

Langchain支持很方便的OpenAI模型的調用,可以做到快速開發大模型應用。但是要使用Huggingface上的開源模型就沒有那么方便了,本文就詳細闡述如何用Langchain開發基于Huggingface上的模型,并實時返回生成結果。 實時返回生成結果是LLM很關鍵的…

Java安全-常規漏洞問題(SQL注入,XXE,SSRF,RCE)

靶場搭建 靶場下載 : https://github.com/whgojp/JavaSecLab這個靶場是使用Springboot搭建的所以不要下載 jar 文件運行,要使用IDEA運行他的文件夾 先打開pom 然后進行maven一下 改一下端口 配置完成之后修改一下 運行的模式 使用phpstudy搞一個sql數…

基于視頻的 AI 內存庫,極速語義檢索

簡介 在大模型應用里,將文本數據分塊嵌入存儲在向量數據庫已經是標準做法。然而,傳統向量數據庫雖然功能強大,但其高昂的RAM和存儲需求,以及復雜的部署運維,常常讓開發者望而卻步。今天,介紹一個名為 Memv…

接口適配器模式實現令牌桶算法和漏桶算法

以下是令牌桶算法、漏桶算法和雪花算法的清晰對比解析。它們屬于完全不同的技術領域,前兩者用于流量控制,后者用于分布式ID生成: 1. 令牌桶算法(Token Bucket) 領域:流量整形 / 速率限制核心目標&#xff…

618背后的電商邏輯重構:從價格血戰到價值共生

“今年終于沒做數學題。” 618進行到一半,行云已經買了很多,大件的有iPad、iWatch,小件的有運動鞋、面膜、紙巾。往年她要湊湊減減,經常要找個店鋪湊單,下完單再馬上退掉,今年她沒廢太多腦細胞&#xff0c…

解決 PyTorch 與 Python 3.12 的兼容性問題:`operator torchvision::nms does not exist` 深度解析

解決 PyTorch 與 Python 3.12 的兼容性問題 問題現象錯誤根源分析終極解決方案?? 推薦方案:創建 Python 3.11 虛擬環境? 備選方案:使用 PyTorch 夜間構建版(Python 3.12)驗證修復技術深度解析最佳實踐建議問題現象 當在 Python 3.12 環境中運行以下代碼時: from tran…

Git 實戰場景

四、標簽管理 4.1、標簽的理解 在使用 Git 進行版本管理時,**標簽(Tag)**扮演著非常重要的角色。它其實就是對某次提交(commit)的一個簡潔標識,相當于給這次提交起了一個可讀、易記的“別名”。比如&…