Python類型處理與推導式

歡迎來到啾啾的博客🐱。
記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。
有很多很多不足的地方,歡迎評論交流,感謝您的閱讀和評論😄。

目錄

  • 1 引言
  • 2 類型處理
  • 3 高效操作AI開發常見數據結構
    • 3.1 list推導式
    • 3.2 dict推導式

1 引言

速成之后鞏固一下。

2 類型處理

和Java靜態類型不同,Python是動態類型的。
動態類型不用聲明,但在使用時往往不知道類型,所以Python 3.5版本之后引入了一個非常重要的特性:

  • 類型提示 (Type Hinting)
    它的作用,就是在代碼中“提示”一個變量、函數參數或返回值應該是什么類型。
**傳統的Python方式 (純動態類型):**
name = "World"
process_id = 123**現代的Python方式:**
name: str = "World"
process_id: int = 123

和Java不同,Python的類型提示在默認情況下是?不強制?的。也就是說,即便你給一個標記為?str?的變量賦予一個整數,Python解釋器本身在運行時?不會報錯
它的真正威力在于?開發階段。現代的IDE和一些叫做“靜態類型檢查器”(如Mypy)的工具,會讀取這些提示,像Java的編譯器一樣,在代碼運行前就給你指出潛在的類型錯誤。

除了這個,Python還有一個Pydantic庫,可以用于處理復雜情況下的數據類型,讓代碼變得更具可讀性,且能拋出清晰的錯誤。

from pydantic import BaseModel
from typing import List, Dict# 1. 我們用類型提示來“定義”我們期望的數據結構
class Message(BaseModel):role: strcontent: strclass Choice(BaseModel):index: intmessage: Messagefinish_reason: strclass APIResponse(BaseModel):id: strmodel: strchoices: List[Choice] # 這里明確指出choices是一個包含Choice對象的列表usage: Dict[str, int]def get_from_api():api_response = {"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"model": "gpt-4","choices": [{"index": 0,"message": {"role": "assistant","content": "你好!有什么可以幫助你的嗎?"},"finish_reason": "stop"}],"usage": {"prompt_tokens": 9,"completion_tokens": 12,"total_tokens": 21}}return api_response# 2. 我們用這個定義好的結構來“解析”原始數據
raw_data = get_from_api() # 假設這里拿到了上面的字典數據
response_model = APIResponse.model_validate(raw_data)# 3. 輸入 response_model. 就會看到 id, model, choices...類型是安全的
content = response_model.choices[0].message.content 

3 高效操作AI開發常見數據結構

在 AI 開發中,列表(list)和字典(dict)非常常見。我們來了解一下 Python 是如何利用其獨有特性 —— 推導式(Comprehensions)高效操作它們的。

3.1 list推導式

假設我們有一個需求:給定一個數字列表,我們想要創建一個新的列表,只包含其中所有偶數的平方。

  • 傳統的寫法:
# 這是用傳統循環方式實現的Python代碼
numbers = [1, 2, 3, 4, 5, 6]
squares_of_evens = [] # 1. 初始化一個空列表
for number in numbers: # 2. 遍歷原列表if number % 2 == 0: # 3. 判斷條件squares_of_evens.append(number * number) # 4. 添加處理后的結果# 最終結果: [4, 16, 36]
  • 列表推導式
numbers = [1, 2, 3, 4, 5, 6]
squares_of_evens = [number * number for number in numbers if number % 2 == 0]# 最終結果: [4, 16, 36]

列表推導式的基本結構是:[<要執行的表達式> for <元素> in <可迭代對象> if <篩選條件>]
這個特性在數據處理中極為常用,比如清洗文本數據、篩選特定樣本、轉換數據格式等等。它不僅代碼更短,通常執行效率也比手動?for?循環加?.append()?的方式要高。

  • 例子
    假設您從一個文本文件中讀取了很多用戶的評論,存放在一個列表?reviews?中。現在,您需要進行數據預處理。
reviews = ["這個產品太棒了!","不好用。","強烈推薦,物超所值!","有點小貴","物流很快"
]result = [review for review in reviews if len(review) > 5]

3.2 dict推導式

假設我們有一個列表,里面是產品名稱。我們還有一個需求,要創建一個字典,其中?鍵(key)?是產品名稱,值(value)?是這個產品名稱的字符長度。

products = ["Laptop", "Mouse", "Keyboard"]# 期待字典為
{'Laptop': 6, 'Mouse': 5, 'Keyboard': 8}

使用字典推導式,可以這么寫:

product_lengths = {product: len(product) for product in products}

結構{<鍵表達式>: <值表達式> for <元素> in <可迭代對象>}

使用推導式可以快速地轉換list為dict,可以將后續查詢的時間復雜度由O(n)變為O(1)。

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

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

相關文章

數據庫char字段做trim之后查詢很慢的解決方式

select * from TABLE0 where trim(column1):param 當表數據量大時&#xff0c;即使給column1字段加上索引&#xff0c;這條查詢語句也會很慢。 因為使用trim函數后&#xff0c;column1的索引會失效&#xff0c;有兩種處理方法&#xff1a; 1.給表加上trim(column1)函數索引 …

Kafka核心架構解析:從CAP理論到消息可靠性的設計哲學

摘要 本文從分布式系統CAP理論和消息可靠性兩個視角深入解析Kafka的架構設計&#xff0c;通過概念關系圖和組件交互圖揭示其核心設計思想&#xff0c;并詳細拆解各組件功能與協作機制。文章包含完整的交互流程分析和配置參數說明&#xff0c;是理解Kafka設計精髓的實用指南。 一…

LeetCode 275.H指數 II

題目&#xff1a; 給你一個整數數組 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇論文被引用的次數&#xff0c;citations 已經按照 非降序排列 。計算并返回該研究者的 h 指數。 h 指數的定義&#xff1a;h 代表“高引用次數”&#xff08;high citations&…

OV汽車攝像頭cmos sensor 相關情況介紹

OV汽車攝像頭cmos sensor 相關情況介紹 文章目錄 OV汽車攝像頭cmos sensor 相關情況介紹**1. 汽車攝像頭三大場景應用****2. 車載CMOS SENSOR的核心技術****3. 兩大車規認證:實現真正的車規可靠性****4. 最新產品**2022年,汽車智能化加碼提速,被譽為“智能駕駛之眼”的車載攝…

Pinia在多步驟表單中的實踐應用

引言 Pinia是Vue 3推薦的狀態管理庫&#xff0c;相比Vuex提供了更簡潔的API、更好的TypeScript支持和更靈活的組合式風格。本文基于實際項目代碼&#xff0c;詳細介紹Pinia在多步驟表單場景中的應用方法。 1. Pinia Store的創建與設計 1.1 基礎Store結構 在src/store/modul…

目標檢測之YOLOV11的環境搭建

1 創建虛擬環境 conda create -n yolov11 python3.9 conda activate yolov112 安裝ultralytics 默認是有cuda的情況下 # Install all packages together using conda conda install pytorch torchvision conda 還不能直接安裝ultralytics&#xff0c;需要通過pip進行安裝 …

Android 構建配置中的變量(通常在設備制造商或定制 ROM 的 AndroidProducts.mk 或產品配置文件中定義)

以下是 Android 構建系統中常見的用于產品配置、資源復制和構建規則的變量 1. PRODUCT_COPY_FILES 作用&#xff1a;指定需要從源碼樹復制到鏡像的文件。示例&#xff1a;PRODUCT_COPY_FILES \device/manufacturer/device_name/file.conf:$(TARGET_COPY_OUT_VENDOR)/etc/file…

火山引擎項亮:機器學習與智能推薦平臺多云部署解決方案正式發布

資料來源&#xff1a;火山引擎-開發者社區 2022年7月20日&#xff0c;火山引擎2022 Force原動力大會在北京諾金酒店成功舉辦。在上午的議程中&#xff0c;《推薦系統實踐》一書的作者、同時也是火山引擎機器學習系統負責人——項亮&#xff0c;展開了題目為《開放AI基建&#x…

NVR的方法多種取決于應用場景

攝像頭接入NVR&#xff08;網絡視頻錄像機&#xff09;的方法通常取決于具體的應用場景和設備支持的功能。 一、通過局域網接入 設備連接 &#xff1a; 將攝像機通過網絡線纜連接到NVR的對應端口&#xff0c;或者將攝像機和NVR都連接到同一個路由器/交換機上&#xff0c;確保它…

JAVA從入門到精通一文搞定

博主介紹&#xff1a; 大家好&#xff0c;我是想成為Super的Yuperman&#xff0c;互聯網宇宙廠經驗&#xff0c;17年醫療健康行業的碼拉松奔跑者&#xff0c;曾擔任技術專家、架構師、研發總監負責和主導多個應用架構。 近期專注&#xff1a; DeepSeek應用&#xff0c;RPA應用研…

火山引擎發布大模型生態廣場MCP Servers,LAS MCP助力AI數據湖構建

資料來源&#xff1a;火山引擎-開發者社區 近日&#xff0c;火山引擎發布大模型生態廣場—— MCP Servers&#xff0c;借助字節跳動生態能力&#xff0c;通過“MCP Market&#xff08;工具廣場&#xff09; 火山方舟&#xff08;大模型服務&#xff09;Trae&#xff08;應用開…

NodeJS 對接 Outlook 發信服務器實現發信功能

示例代碼&#xff1a; const express require(express); const nodemailer require(nodemailer); const querystring require(querystring); const axios require(axios);const app express(); app.use(express.json());const transporter nodemailer.createTransport({…

【同聲傳譯】RealtimeSTT:超低延遲語音轉文字,支持喚醒詞與中譯英

把你說的話實時變成文字&#xff1a;RealtimeSTT 上手體驗 想找一個真正好用的語音轉文字工具嗎&#xff1f;不用等說完一整段才出結果&#xff0c;也不用反復點擊按鈕。RealtimeSTT 這個開源項目能做到??實時??轉錄&#xff0c;你說一句&#xff0c;屏幕上幾乎同時出現文…

【大模型lora微調】關于推理時如何使用 LoRA Adapter

假設你有兩部分&#xff1a; 一個是原始大模型&#xff08;base model&#xff09; 一個是保存的 LoRA Adapter&#xff08;adapter_config.json adapter_model.bin&#xff09; 不合并的情況下推理方法 你可以用 peft 的方式加載 LoRA Adapter&#xff0c;推理時這樣寫&a…

谷歌時間序列算法:零樣本預測如何重塑行業決策?

谷歌時間序列算法&#xff1a;零樣本預測如何重塑行業決策&#xff1f; TimesFM 你是否曾面臨這樣的困境&#xff1f;—— ? 需要預測新產品銷量&#xff0c;卻苦于缺乏歷史數據&#xff1b; ? 依賴傳統模型&#xff08;如ARIMA&#xff09;&#xff0c;但調參耗時且泛化能力…

國產服務器【銀河麒麟v10】【CPU鯤鵬920】部署Minio文件服務器

目錄 準備工作操作步驟1. 確認掛載點狀態2. 創建專用用戶和目錄3. 下載ARM版Minio到掛在盤4. 環境變量配置5. 更新Systemd服務配置6. 啟動、重啟7. 防火墻8. 訪問驗證9. 故障排查&#xff08;如服務未啟動&#xff09;? 結束 準備工作 環境要求&#xff1a;Linux虛擬機 操作…

解決: React Native android webview 空白頁

Android react-native-webview 之前是正常的, 升級了 react-native / react-native-webview 等 之后, 就變成了空白頁. 通過下面的修改, 可以修復, 回到正常的狀態. 來源: https://github.com/react-native-webview/react-native-webview/issues/3697 注意 ts 文件一定要改,…

高中編程教學中教師專業發展的困境與突破:基于實踐與理論的雙重審視

一、引言 1.1 研究背景 在數字化時代&#xff0c;編程已成為一項基本技能&#xff0c;其重要性日益凸顯。編程不僅是計算機科學領域的核心能力&#xff0c;更是培養學生邏輯思維、創新能力和問題解決能力的有效途徑。高中階段作為學生成長和發展的關鍵時期&#xff0c;開展編…

最小化聯邦平均(FedAvg)的算法開銷

一、通信開銷最小化 FedAvg中服務器與客戶端間的頻繁參數傳輸是主要瓶頸&#xff0c;可通過以下方法優化&#xff1a; 1. 模型壓縮技術 稀疏化&#xff1a;僅上傳重要參數更新&#xff08;如Top-k梯度&#xff09; 實現&#xff1a;客戶端本地訓練后&#xff0c;保留絕對值最…

準備開始適配高德Flutter的鴻蒙版了

我們的Flutter項目在編譯為鴻蒙的過程中&#xff0c; 遇到了各種插件不支持的問題。 大部分都能解決&#xff0c;或者用別的方式代替。 這個高德我真的是無語&#xff0c; 我們只能用高德 &#xff0c; 目前還沒看到網上有人適配了鴻蒙。 那就我來干吧&#xff0c; 第一…