Python潮流周刊:Python 3.13 計劃將解釋器提速 50%!
你好,我是貓哥。這里每周分享優質的 Python 及通用技術內容,部分為英文,已在小標題注明。(標題取自其中一則分享,不代表全部內容都是該主題,特此聲明。)
由于公眾號不支持外鏈,文中大量鏈接無法點擊。可直達我的博客閱讀(復制到瀏覽器中打開):https://pythoncat.top/posts/2023-06-24-weekly
??文章&教程
- Python 3.13 版本的計劃 (英)
Faster CPython 項目(即香農計劃)有了關于 3.13 版本的最新計劃,這次的性能目標是減少解釋器 50% 的耗時。涵蓋三項主要工作:第 2 層的優化器、啟用子解釋器(PEP-554)、內存管理。
- 為什么 Numpy 并行性很重要?(英)
Numpy 是作科學計算和數據分析的最重要的庫之一,并行性是提升其性能的重要手段。文章介紹了 5 種可以實現 Numpy 并行性的場景和方法:加載/保存 Numpy 數組數據、高效地計算數學函數、高效地初始化數組、并行執行數組的元素級數學運算、在進程間高效共享 Numpy 數組數據。
- 用少于 100 行的 Rust 使 Python 變快 100 倍 (英)
文章針對一個有性能問題的 Python 庫,使用 Rust 重寫并作了三輪優化后,提升了性能 100 倍。文中使用了 py-spy 庫繪制火焰圖,分析出了代碼的瓶頸點,并以此作為優化的依據,可以看到前后火焰圖的差別很大。
py-spy火焰圖
- 將 Python 項目移植到 Rust (英)
文章指出“一步到位的移植”方式存在一些問題,從而提出“迭代式移植”的方法,并給出了一個代碼示例。
- 設計 Pythonic 的庫 API (英)
如何設計出一個 Pythonic 的 API?在設計上有什么方法和基本原則呢?文章從代碼結構、變量命名、錯誤處理、版本控制、類型注解等方面,給出了非常詳細的介紹。文章較長,最后總結出 18 條 takeaways。
- 編譯類型化的 Python (英)
Python 已支持類型提示,那能否編譯 Python 代碼為本地代碼以提升性能呢?雖然類型提示可以提供一些性能優化,但由于 Python 的動態特性和靈活性,使得靜態分析和編譯非常困難。因此目前還沒有一種方法可以將 Python 代碼編譯成本地代碼以提高性能。
- pytest 的夾具很神奇!(英)
夾具(fixture)是在測試前設置和準備必要數據的一種機制,可以將測試數據和測試代碼分離。文章介紹了 pytest 中夾具的基本用法,以及與 Django 項目的結合使用。
- 探析 Python 字典的實現原理 (英)
這是一個系列文章,支持用可視化的調試方式探析 Python字典的實現原理。這篇文章介紹了如何通過哈希表實現字典,以及如何解決哈希沖突。
在列表中搜索的可視化
- Flask vs Django:選擇完美的 Python Web 框架 (英)
Python 最主流的兩個 Web 框架是 Flask 和 Django,文章深入比較了它們的主要功能、優勢與缺點、流行的插件和使用場景等,讓讀者更方便做出自己的選擇。
- 為什么不告訴人們“簡單地”使用 pyenv、poetry、anaconda (英)
文章的要點是:介紹一個基本的 Python 打包流程,盡可能減少依賴和要求,并解決大多數用戶的打包問題。文中列出了一些常見的打包問題,并提供了一些解決方案,同時指出了一些常見的打包工具(如 homebrew、pyenv、anaconda、poetry)的缺點。
- PyScript 中的 Asyncio (英)
文章介紹了在 PyScript/Pyodide 中使用 async/await/asyncio 來編寫并發代碼,還介紹了 Pyodide.Webloop 的實現,該實現允許 async/await 與瀏覽器事件循環一起使用。
- 線程的問題及其解決方案 (英)
上期周刊第一則分享中的三篇文章偏向于支持隱式的 async,有讀者建議再呈現一些支持顯式 async 的觀點。這篇文章的要點是:線程會使本地推理變得困難,而本地推理是軟件開發中最重要的事情之一。因此,應該避免使用線程,而使用異步編程模型,如回調、promise、協程等。同時,文章還提到了使用隱式協程的風險,因為它們可能會導致與線程相同的問題。(@Plutonium 投稿)
???項目&資源
- PyQt-Fluent-Widgets:基于 PyQt5 的 Fluent Design 風格組件庫
目前開源且美觀實用的 PyQt/PySide 組件庫很少,所以作者照著 WinUI3 的設計稿寫了這個 Fluent Design 風格的組件庫,支持亮暗主題無縫切換和自定義主題色,支持 PyQt5/PyQt6/PySide2/PySide6 ,搭配 QtDesigner 可以快速設計出美觀的界面。(來自@shokokawaii)
- pyvibe:使用 Python 生成樣式化的 HTML 頁面 (英)
PyVibe是一個用于創建網頁的 Python 庫,讓 Python 開發者快速構建前端頁面,簡化 UI 開發。PyVibe 返回一個 HTML 字符串,可用于靜態頁面、Flask 函數、Pyodide 動態客戶端呈現。
PyVibe生成標題及文本的示例
- pynecone:純 Python 的 Web 框架 (英)
Pynecone 發布于 2022 年 12 月,已獲得 9K 星星,可謂十分火爆。它是一個用于構建和部署 Web 程序的全棧框架,提供了 50+ 內置組件,支持創建復雜的布局和使用 CSS 的全部功能來設置樣式。
Pynecone文檔及演示項目
- pytudes:短小精悍的 Python 編程練習內容 (英)
這個項目包含了一些短小卻很有挑戰性的項目代碼,既有“Advent of Code”歷年的年度編程挑戰活動的題目,也有“The Riddler”的系列數學謎題,還有文字謎題、概率問題等,甚至有使用 Python 解任何的數獨題、實現一個 lisp 解釋器,等等。
- recognize-anything:Recognize Anything 模型和 Tag2Text 模型 (英)
Recognize Anything Model 是一種圖像標記模型,可以高精度地識別任何常見類別;Tag2Text 是一種以標簽為指導的視覺語言模型,可以支持字幕、檢索和標簽。這個項目是這兩個模型的代碼實現。
對比不同模型的物體標注能力
- ask-multiple-pdfs:支持與多個 PDF 聊天的 Langchain 程序 (英)
支持使用自然語言同時與多個 PDF 文件進行對話。項目使用了 streamlit,可在瀏覽器中顯示用戶界面。
實現原理圖
- DeepKE:用于知識圖譜提取和及構建的開放工具包 (英)
DeepKE 是用于知識圖譜構建的知識提取工具包,支持 cnSchema、低資源、文檔級和多模態場景的實體、關系和屬性提取。三個主要功能:命名實體識別、關系提取、屬性提取。項目提供了詳細的文檔、教程和在線演示。
模型的框架
- awesome-DevOps:精選的 DevOps 平臺、工具、實踐和資源的列表 (英)
一個“awesome”系列倉庫,收錄了關于 DevOps 的方方面面的內容,包含各種平臺、自動化、CI/CD、代碼管理、網絡服務器、數據庫、監控工具、網關、混沌工程,等等。
??討論&問題
- Hacker News:Our Plan for Python 3.13 (英)
一則熱門討論,話題關于 Python 3.13 版本的開發計劃。不出意外,大部分的留言都圍繞著 GIL,贊成與反對聲皆有。
- 在你最喜歡的編程語言中,有哪些很優雅的代碼庫?(英)
這也是一則 HN 上的帖子,既引起了關于編程語言本身的討論,也涉及不同編程語言生態中的一些優秀的項目。有趣的是,有三則關于 Python 的留言都推薦了我們在上文中分享的pytudes項目!