Python 潮流周刊#21:如何提升及測量 Python 代碼的性能?
△點(diǎn)擊上方“Python貓”關(guān)注 ,回復(fù)“1”領(lǐng)取電子書
你好,我是貓哥。這里每周分享優(yōu)質(zhì)的 Python、AI 及通用技術(shù)內(nèi)容,大部分為英文。標(biāo)題取自其中三則分享,不代表全部內(nèi)容都是該主題,特此聲明。
本周刊由 Python貓 出品,精心篩選國內(nèi)外的 250+ 信息源,為你挑選最值得分享的文章、教程、開源項(xiàng)目、軟件工具、播客和視頻、熱門話題等內(nèi)容。愿景:幫助所有讀者精進(jìn) Python 技術(shù),并增長職業(yè)和副業(yè)的收入。
本周刊開通 Telegram 頻道后,已有 700+ 小伙伴加入,歡迎你到來:https://t.me/pythontrendingweekly
??文章&教程
1、在單核情況下加快 Python 代碼速度[1]
文章使用弗洛伊德-斯坦伯格抖動算法為例,使用各種技巧來提升代碼性能,實(shí)現(xiàn)將耗時(shí)從 2339 微秒逐步降低到 554 微秒。涉及的一些概念:指令級并行 (ILP)、分支預(yù)測、單指令多數(shù)據(jù)(SIMD)、內(nèi)存層次結(jié)構(gòu)等。
2、使用 Radon 作 Python 的代碼度量[2]
一篇基礎(chǔ)的入門教程,了解如何用 Radon 來衡量 Python 的代碼復(fù)雜度,即計(jì)算圈復(fù)雜度等指標(biāo),介紹了相關(guān)命令的使用。
3、Python(大部分)由語法糖組成[3]
Brett Cannon 寫了一系列關(guān)于“語法糖”的博客,解析了 80 多個(gè)語法糖特性。文章基于他在 PyCon 的演講及博客,介紹了其中的部分內(nèi)容。
4、迎接新的 SymPy[4]
SymPy 是一個(gè)用于符號計(jì)算(symbolic computation)的庫,可以處理代數(shù)、微積分、離散數(shù)學(xué)等領(lǐng)域的問題。這是一個(gè)系列文章,介紹它將迎來的重大變化。文章描述了 SymPy 當(dāng)前存在的速度問題、為加速它而作的工作、將來的提速計(jì)劃。(附:系列第二篇:SymPy 多項(xiàng)式計(jì)算[5])
5、使用 import-linter 讓你的 Python 項(xiàng)目架構(gòu)更整潔[6]
在依賴關(guān)系治理方面,import-linter[7] 是一個(gè)非常有用的工具。它通過提供各種類型的“契約”,讓我們得以將項(xiàng)目內(nèi)隱式的復(fù)雜依賴關(guān)系,通過配置文件顯式的表達(dá)出來。文章介紹了它的入門使用,以及 6 種修復(fù)依賴關(guān)系的技巧。
6、CPython 如何用布隆過濾器作字符串處理?[8]
CPython 在處理字符串時(shí)使用了布隆過濾器,比如 splitlines()、strip() 兩個(gè)函數(shù),文章介紹了它們的實(shí)現(xiàn)原理。文章還介紹了典型布隆過濾器的實(shí)現(xiàn)原理,以及 CPython 中布隆過濾器的實(shí)現(xiàn)(不到 50 行 C 代碼)。
7、Python 中 UUID 的使用[9]
介紹了uuid 庫的幾個(gè)方法:uuid1() 利用系統(tǒng) MAC 地址與時(shí)間戳生成 uuid;uuid4() 生成完全隨機(jī)的 uuid;uuid3() 和 uuid5() 基于常量命名空間和變量名生成 uuid,前者使用 MD5 算法,后者使用 SHA-1 算法。
8、為什么有這么多 Python Dataframe?[10]
為什么會有 Pandas、Polars、Dask 和 PySpark 等大量的 Dataframe 庫?作者認(rèn)為主要的原因是它的四種角色模型:電子表格、關(guān)系數(shù)據(jù)庫、二維數(shù)組/矩陣、對象,以及由此衍生出的一系列問題。
9、使用 Python 模擬“三門問題”[11]
Monty Hall 問題也被稱為三門問題,是一道挑戰(zhàn)人們直覺的概率問題。文章使用 Python 來模擬這個(gè)問題,看看需要多久才能贏取獎品。
10、6 件可以用 Functools 模塊做的很酷的事[12]
文章介紹了 functools 標(biāo)準(zhǔn)庫的 6 個(gè)使用場景:@cache 緩存、@total_ordering 讓你少寫雙下方法、partial() 凍結(jié)函數(shù)、@singledispatch 泛型函數(shù)、@wraps 裝飾器、reduce() 函數(shù)。
11、深入理解 pytest.main():Python 測試框架的核心功能解析[13]
pytest.main 是 Pytest 框架中一個(gè)非常實(shí)用的函數(shù),用于從命令行運(yùn)行測試集或者以編程方式運(yùn)行測試。文章探討了它的用法和一些常見的應(yīng)用場景。
12、7 個(gè)極佳的 Python 身份驗(yàn)證庫[14]
介紹了 7 個(gè)不錯(cuò)的身份驗(yàn)證庫:Authlib、Pyjwt、Flask-login、Django-allauth、ItsDangerous、Python Social Auth、Flask-security。(附:中文翻譯[15])
??Python潮流周刊??已免費(fèi)發(fā)布了 21 期,訪問下方鏈接,即可查看全部內(nèi)容:https://pythoncat.top/tags/weekly[16]
如果你覺得周刊有價(jià)值,請表達(dá)小小心意,贊賞一下貓哥吧~~
???項(xiàng)目&資源
1、radon:Python 代碼的各種指標(biāo)[17]
一個(gè) Python 代碼指標(biāo)分析工具,可以計(jì)算圈復(fù)雜度、原始指標(biāo)、Halstead 指標(biāo)、可維護(hù)性指數(shù),可用于 CI 集成,可與 Jupyter Notebook 一起使用。(star 1.5K)
2、agents:自主語言代理的開源框架[18]
自主語言代理(Autonomous Language Agents)指的是能夠獨(dú)立執(zhí)行自然語言處理任務(wù)的智能代理系統(tǒng)。這個(gè)庫支持長期短期記憶、工具使用、Web 導(dǎo)航、多 agent 通信、人機(jī)交互和符號控制等功能。(star 2.6K)
3、quasiqueue:一個(gè)多進(jìn)程庫[19]
一個(gè)用于 Python 多進(jìn)程的庫,便于管理長時(shí)間運(yùn)行的多進(jìn)程作業(yè)。可處理進(jìn)程創(chuàng)建和清理、信號管理、跨進(jìn)程通信以及其它在處理多進(jìn)程時(shí)的麻煩事。
4、pygraft:可配置的模式和知識圖譜生成[20]
可根據(jù)用戶指定的參數(shù)生成逼真的模式和知識圖譜,通過使用 DL 推理器(HermiT)來確保邏輯一致性。
5、toml-bench:在 Python 中該用哪個(gè) toml 庫?[21]
這個(gè)倉庫主要從多個(gè)維度比較了 toml、tomli/tomli_w、tomlkit、pytomlpp、rtoml 和 qtoml 這幾個(gè)庫,考察它們在處理數(shù)據(jù)時(shí)的行為表現(xiàn)以及性能。
6、SyncDreamer:以單視角圖像生成多視角一致的圖像[22]
提供一張圖片,使用 Paint3D 分割前景對象,通過推理生成多個(gè)視角的圖像。
7、nanosam:使用 NVIDIA TensorRT 實(shí)時(shí)運(yùn)行的 SAM 模型[23]
Segment Anything(SAM)是在計(jì)算機(jī)視覺領(lǐng)域中對圖像或視頻中的任何對象進(jìn)行分割的任務(wù),以提取出具有語義或視覺特征的子區(qū)域或?qū)ο蟆?/p>
8、logparser:用于日志解析的機(jī)器學(xué)習(xí)工具包[24]
國人開源作品。可自動從非結(jié)構(gòu)化的日志信息中提取出結(jié)構(gòu)化的關(guān)鍵信息。(star 1.2K)
9、llama2.mojo:純 Mojo 版本的 Llama 2[25]
作者將 Python 版本的 llama2.py 移植成 Mojo 版本,將性能提高了近 250 倍。(star 1.1K)
10、bisheng:一個(gè)開放的 LLM DevOps 平臺[26]
一款領(lǐng)先的開源大模型應(yīng)用開發(fā)平臺,中文“畢昇”,可以搭建各類豐富的大模型應(yīng)用:分析報(bào)告生成、知識庫問答、對話、要素提取等。
??播客&視頻
1、EuroPython 2023 的 146 個(gè)視頻[27]
今年 EuroPython 活動的演講視頻。
2、Real Python 播客 #172:使用 Scalene 測量 Python 性能[28]
Scalene 是一款高性能的 CPU、GPU 和內(nèi)存分析器,可以從單個(gè)函數(shù)或代碼行級別分析代碼,并比較在 Python 和 C 代碼中花費(fèi)的時(shí)間。播客嘉賓是馬薩諸塞大學(xué)教授,他與學(xué)校實(shí)驗(yàn)室的學(xué)生開發(fā)了 Scalene。
??贊助&支持
如果你喜歡周刊,請分享給其他需要的同學(xué),讓更多人可以從中受益~
如果你覺得周刊有價(jià)值,請隨意贊賞[29] 或 買杯咖啡[30] 進(jìn)行支持!
如果你想幫助周刊辦得更好,歡迎向我們投稿或提出建議:投稿/建議通道[31]
如果你是品牌方或廣告主,歡迎私信我,洽談贊助與合作事項(xiàng)。
??歡迎訂閱
-
微信公眾號[32]:除更新周刊外,還發(fā)布其它原創(chuàng)作品,并轉(zhuǎn)載一些優(yōu)質(zhì)文章。(可加好友,可加讀者交流群) -
博客[33] 及 RSS[34]:我的獨(dú)立博客,上面有歷年原創(chuàng)/翻譯的技術(shù)文章,以及從 2009 年以來的一些隨筆。 -
Github[35]:你可以獲取本周刊的 Markdown 源文件,做任何想做的事! -
郵件[36]:在 Substack 上開通的頻道,滿足你通過郵件閱讀時(shí)事通訊的訴求。 -
Telegram[37]:除了發(fā)布周刊的通知外,我將它視為一個(gè)“副刊”,補(bǔ)充發(fā)布更加豐富的資訊。 -
Twitter[38]:我的關(guān)注列表里有大量 Python 相關(guān)的開發(fā)者與組織的賬號。
參考資料
在單核情況下加快 Python 代碼速度: https://pythonspeed.com/articles/optimizing-dithering/
[2]使用 Radon 作 Python 的代碼度量: https://www.blog.pythonlibrary.org/2023/09/20/learning-about-code-metrics-in-python-with-radon/
[3]Python(大部分)由語法糖組成: https://lwn.net/Articles/942767/
[4]迎接新的 SymPy: https://oscarbenjamin.github.io/blog/czi/post1.html
[5]系列第二篇:SymPy 多項(xiàng)式計(jì)算: https://oscarbenjamin.github.io/blog/czi/post2.html
[6]使用 import-linter 讓你的 Python 項(xiàng)目架構(gòu)更整潔: https://www.piglei.com/articles/use-import-linter-to-lint-proj-arch/
[7]import-linter: https://github.com/seddonym/import-linter
[8]CPython 如何用布隆過濾器作字符串處理?: https://codeconfessions.substack.com/p/cpython-bloom-filter-usage
[9]Python 中 UUID 的使用: https://medium.com/@m____b____/uuids-with-python-b133cead1b4c
[10]為什么有這么多 Python Dataframe?: https://ponder.io/why-are-there-so-many-python-dataframes/
[11]使用 Python 模擬“三門問題”: https://www.dataschool.io/python-probability-simulation/
[12]6 件可以用 Functools 模塊做的很酷的事: https://pybit.es/articles/6-cool-things-you-can-do-with-the-functools-module/
[13]深入理解 pytest.main():Python 測試框架的核心功能解析: https://juejin.cn/post/7281491804736831542
[14]7 個(gè)極佳的 Python 身份驗(yàn)證庫: https://python.plainenglish.io/7-best-python-authentication-libraries-you-should-use-in-your-next-project-c07b668d5348
[15]中文翻譯: https://juejin.cn/post/7281150086351732751
[16]https://pythoncat.top/tags/weekly: https://pythoncat.top/tags/weekly
[17]radon:Python 代碼的各種指標(biāo): https://github.com/rubik/radon
[18]agents:自主語言代理的開源框架: https://github.com/aiwaves-cn/agents
[19]quasiqueue:一個(gè)多進(jìn)程庫: https://github.com/tedivm/quasiqueue
[20]pygraft:可配置的模式和知識圖譜生成: https://github.com/nicolas-hbt/pygraft
[21]toml-bench:在 Python 中該用哪個(gè) toml 庫?: https://github.com/pwwang/toml-bench
[22]SyncDreamer:以單視角圖像生成多視角一致的圖像: https://github.com/liuyuan-pal/SyncDreamer
[23]nanosam:使用 NVIDIA TensorRT 實(shí)時(shí)運(yùn)行的 SAM 模型: https://github.com/NVIDIA-AI-IOT/nanosam
[24]logparser:用于日志解析的機(jī)器學(xué)習(xí)工具包: https://github.com/logpai/logparser
[25]llama2.mojo:純 Mojo 版本的 Llama 2: https://github.com/tairov/llama2.mojo
[26]bisheng:一個(gè)開放的 LLM DevOps 平臺: https://github.com/dataelement/bisheng
[27]EuroPython 2023 的 146 個(gè)視頻: https://www.youtube.com/playlist?list=PL8uoeex94UhFcwvAfWHybD7SfNgIUBRo-
[28]Real Python 播客 #172:使用 Scalene 測量 Python 性能: https://realpython.com/podcasts/rpp/172/
[29]贊賞: https://img.pythoncat.top/wechat_code.png
[30]買杯咖啡: https://www.buymeacoffee.com/pythoncat
[31]投稿/建議通道: https://github.com/chinesehuazhou/python-weekly/issues/new
[32]微信公眾號: https://img.pythoncat.top/python_cat.jpg
[33]博客: https://pythoncat.top
[34]RSS: https://pythoncat.top/rss.xml
[35]Github: https://github.com/chinesehuazhou/python-weekly
[36]郵件: https://pythoncat.substack.com
[37]Telegram: https://t.me/pythontrendingweekly
[38]Twitter: https://twitter.com/chinesehuazhou
