Python 潮流週刊#21:如何提升及測量 Python 代碼的性能?

你好,我是貓哥。這裏每週分享優質的 Python、AI 及通用技術內容,大部分爲英文。標題取自其中三則分享,不代表全部內容都是該主題,特此聲明。

本週刊由 Python貓 出品,精心篩選國內外的 250+ 信息源,爲你挑選最值得分享的文章、教程、開源項目、軟件工具、播客和視頻、熱門話題等內容。願景:幫助所有讀者精進 Python 技術,並增長職業和副業的收入。

微信 | 博客 | 郵件 | Github | Telegram | Twitter

原文☞:https://pythoncat.top/posts/2023-09-23-weekly

🦄文章&教程

1、在單核情況下加快 Python 代碼速度

文章使用弗洛伊德-斯坦伯格抖動算法爲例,使用各種技巧來提升代碼性能,實現將耗時從 2339 微秒逐步降低到 554 微秒。涉及的一些概念:指令級並行 (ILP)、分支預測、單指令多數據(SIMD)、內存層次結構等。

2、使用 Radon 作 Python 的代碼度量

一篇基礎的入門教程,瞭解如何用 Radon 來衡量 Python 的代碼複雜度,即計算圈複雜度等指標,介紹了相關命令的使用。

3、Python(大部分)由語法糖組成

Brett Cannon 寫了一系列關於“語法糖”的博客,解析了 80 多個語法糖特性。文章基於他在 PyCon 的演講及博客,介紹了其中的部分內容。

4、迎接新的 SymPy

SymPy 是一個用於符號計算(symbolic computation)的庫,可以處理代數、微積分、離散數學等領域的問題。這是一個系列文章,介紹它將迎來的重大變化。文章描述了 SymPy 當前存在的速度問題、爲加速它而作的工作、將來的提速計劃。(附:系列第二篇:SymPy 多項式計算

5、使用 import-linter 讓你的 Python 項目架構更整潔

在依賴關係治理方面,import-linter 是一個非常有用的工具。它通過提供各種類型的“契約”,讓我們得以將項目內隱式的複雜依賴關係,通過配置文件顯式的表達出來。文章介紹了它的入門使用,以及 6 種修復依賴關係的技巧。

6、CPython 如何用布隆過濾器作字符串處理?

CPython 在處理字符串時使用了布隆過濾器,比如 splitlines()、strip() 兩個函數,文章介紹了它們的實現原理。文章還介紹了典型布隆過濾器的實現原理,以及 CPython 中布隆過濾器的實現(不到 50 行 C 代碼)。

7、Python 中 UUID 的使用

介紹了uuid 庫的幾個方法:uuid1() 利用系統 MAC 地址與時間戳生成 uuid;uuid4() 生成完全隨機的 uuid;uuid3() 和 uuid5() 基於常量命名空間和變量名生成 uuid,前者使用 MD5 算法,後者使用 SHA-1 算法。

8、爲什麼有這麼多 Python Dataframe?

爲什麼會有 Pandas、Polars、Dask 和 PySpark 等大量的 Dataframe 庫?作者認爲主要的原因是它的四種角色模型:電子表格、關係數據庫、二維數組/矩陣、對象,以及由此衍生出的一系列問題。

9、使用 Python 模擬“三門問題”

Monty Hall 問題也被稱爲三門問題,是一道挑戰人們直覺的概率問題。文章使用 Python 來模擬這個問題,看看需要多久才能贏取獎品。

10、6 件可以用 Functools 模塊做的很酷的事

文章介紹了 functools 標準庫的 6 個使用場景:@cache 緩存、@total_ordering 讓你少寫雙下方法、partial() 凍結函數、@singledispatch 泛型函數、@wraps 裝飾器、reduce() 函數。

11、深入理解 pytest.main():Python 測試框架的核心功能解析

pytest.main 是 Pytest 框架中一個非常實用的函數,用於從命令行運行測試集或者以編程方式運行測試。文章探討了它的用法和一些常見的應用場景。

12、7 個極佳的 Python 身份驗證庫

介紹了 7 個不錯的身份驗證庫:Authlib、Pyjwt、Flask-login、Django-allauth、ItsDangerous、Python Social Auth、Flask-security。(附:中文翻譯

🎁Python潮流週刊🎁已免費發佈了 21 期,訪問下方鏈接,即可查看全部內容:https://pythoncat.top/tags/weekly

原文☞:https://pythoncat.top/posts/2023-09-23-weekly

🐿️項目&資源

1、radon:Python 代碼的各種指標

一個 Python 代碼指標分析工具,可以計算圈複雜度、原始指標、Halstead 指標、可維護性指數,可用於 CI 集成,可與 Jupyter Notebook 一起使用。(star 1.5K)

2、agents:自主語言代理的開源框架

自主語言代理(Autonomous Language Agents)指的是能夠獨立執行自然語言處理任務的智能代理系統。這個庫支持長期短期記憶、工具使用、Web 導航、多 agent 通信、人機交互和符號控制等功能。(star 2.6K)

3、quasiqueue:一個多進程庫

一個用於 Python 多進程的庫,便於管理長時間運行的多進程作業。可處理進程創建和清理、信號管理、跨進程通信以及其它在處理多進程時的麻煩事。

4、pygraft:可配置的模式和知識圖譜生成

可根據用戶指定的參數生成逼真的模式和知識圖譜,通過使用 DL 推理器(HermiT)來確保邏輯一致性。

5、toml-bench:在 Python 中該用哪個 toml 庫?

這個倉庫主要從多個維度比較了 toml、tomli/tomli_w、tomlkit、pytomlpp、rtoml 和 qtoml 這幾個庫,考察它們在處理數據時的行爲表現以及性能。

6、SyncDreamer:以單視角圖像生成多視角一致的圖像

提供一張圖片,使用 Paint3D 分割前景對象,通過推理生成多個視角的圖像。

7、nanosam:使用 NVIDIA TensorRT 實時運行的 SAM 模型

Segment Anything(SAM)是在計算機視覺領域中對圖像或視頻中的任何對象進行分割的任務,以提取出具有語義或視覺特徵的子區域或對象。

8、logparser:用於日誌解析的機器學習工具包

國人開源作品。可自動從非結構化的日誌信息中提取出結構化的關鍵信息。(star 1.2K)

9、llama2.mojo:純 Mojo 版本的 Llama 2

作者將 Python 版本的 llama2.py 移植成 Mojo 版本,將性能提高了近 250 倍。(star 1.1K)

10、bisheng:一個開放的 LLM DevOps 平臺

一款領先的開源大模型應用開發平臺,中文“畢昇”,可以搭建各類豐富的大模型應用:分析報告生成、知識庫問答、對話、要素提取等。

原文☞:https://pythoncat.top/posts/2023-09-23-weekly

🐢播客&視頻

1、EuroPython 2023 的 146 個視頻

今年 EuroPython 活動的演講視頻。

2、Real Python 播客 #172:使用 Scalene 測量 Python 性能

Scalene 是一款高性能的 CPU、GPU 和內存分析器,可以從單個函數或代碼行級別分析代碼,並比較在 Python 和 C 代碼中花費的時間。播客嘉賓是馬薩諸塞大學教授,他與學校實驗室的學生開發了 Scalene。

🐱贊助&支持

如果你喜歡週刊,請分享給其他需要的同學,讓更多人可以從中受益~

如果你覺得週刊有價值,請隨意讚賞買杯咖啡 進行支持!

如果你想幫助週刊辦得更好,歡迎向我們投稿或提出建議:投稿/建議通道

如果你是品牌方或廣告主,歡迎私信我,洽談贊助與合作事項。

🐼歡迎訂閱

  • 微信公衆號:除更新週刊外,還發布其它原創作品,並轉載一些優質文章。(可加好友,可加讀者交流羣)
  • 博客RSS:我的獨立博客,上面有歷年原創/翻譯的技術文章,以及從 2009 年以來的一些隨筆。
  • Github:你可以獲取本週刊的 Markdown 源文件,做任何想做的事!
  • 郵件:在 Substack 上開通的頻道,滿足你通過郵件閱讀時事通訊的訴求。
  • Telegram:除了發佈週刊的通知外,我將它視爲一個“副刊”,補充發布更加豐富的資訊。
  • Twitter:我的關注列表裏有大量 Python 相關的開發者與組織的賬號。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章