Python 潮流周刊#16:优雅重要么?如何写出 Pythonic 的代码?
你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中两则分享,不代表全部内容都是该主题,特此声明。
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。
微信 | 博客 | 邮件 | Github | Telegram | Twitter
为了方便读者获取原始内容,我已将周刊的 Markdown 文件归档在 Github,请通过以下链接获取:https://github.com/chinesehuazhou/python-weekly
文章&教程
作者强调使用 Python 的核心特性来编写惯用的、富有变现力的、优雅的代码很重要,提出优雅不是可有可无的奢侈品。
2、Python Asyncio实践--高并发下如何防止缓存击穿
文章介绍了如何基于Asyncio.Future的特性编写一个语言级别的防缓存击穿的工具——Share,并介绍它的使用和高并发下的处理方法。
3、高效定时任务处理:深入学习 Python 中 APScheduler 库的奥秘
APScheduler 是一个强大的定时任务处理库,这篇长文详细介绍了从入门到精通的相关知识,包括创建定时任务、定时任务触发器、任务存储、并发执行、阻塞和非阻塞调度器、错误处理、立即执行任务、调度器持久化、任务监听器和移除定时任务等。
文章尝试将 Python 的 lambda 函数改成 Javascript 风格的箭头函数。在编译 CPython 时,通过修改 .asdl 文件,重新构造抽象语法树,修改语法分析文件,并利用 pegen 重新生成语法分析器。
你是否对 CPython 的底层运行原理及其内部结构感到好奇?文章通过分析源码,介绍了 CPython 是如何实现引用计数和内存管理的,涉及引用计数的机制、关键数据结构的解释、字节码指令的执行、引用计数的局限性等。
延迟加载指的是在使用时再导入模块,而不是在程序刚执行时就加载。它的好处:减少启动时间、降低内存消耗、提高性能、优化资源、运行时加载。文章介绍了importlib 实现延迟加载的用法。。
7、使用 Python 和 Playwright 进行端到端测试
端到端测试(end-to-end)指的是对程序的整个使用流程从头到尾作测试,可能发现单元测试与集成测试都无法发现的问题。这是一篇详细的入门教程,介绍了 Playwright 的相关用法。
Python 官方虽已宣布会接受 PEP-703,但是最终版本或许要等到 5 年后的 3.17 版本。从 2021 年起,nogil 和 Faster CPython 项目持续吸引大家的关注,这篇文章梳理了它们两年来的发展情况、一些关键性问题的处理方案和重要进展、近期社区和大公司的回应等。(附:Python 官方第一次针对 nogil 的研讨会、Faster CPython 项目的首次亮相)
Instagram 向 Python 贡献了 3.12 版本中的 PEP-683(永生对象,使用固定的引用计数),它可以绕过引用计数检查,这是多核 Python 并行处理的重要基础。文章介绍了 Instagram 遇到的内存使用问题、为解决问题而引入永生对象、并最终贡献到 CPython 的故事。

10、为什么要避免在 Python 中用“import *”?
Python 中一个文件是一个模块,拥有自己的命名空间。当使用“import *”时,这会导致“命名空间污染”!文章指出了遵循 PEP-8 风格的正确写法,同时建议应该用__all__ 来定义模块中可被导出的变量名。
pixi 是最新发布的用 Rust 编写的 Python 包管理器,这篇文章出自其官方博客,主要介绍为什么要开发这个项目、它提供了哪些功能、它的基本执行过程。项目当前基于 Conda 生态,暂不支持 PyPI。
12、使用 Django Rest Framework 实现 JWT 身份验证
一篇非常详细的教程,介绍了 JWT 是什么以及它的工作原理,演示了如何用 DRF 实现 JWT 身份验证的全过程。
13、增强 Django 程序:提升数据库查询的 7 个妙招
数据库查询是影响 Web 程序性能的主要因素之一,这篇文章介绍了 7 个提升性能的技巧:设置查询语句的超时时间、使用assertNumQueries 测试查询数、使用nplusone 捕获 N+1 查询、使用django-zen-queries 捕获 N+1 查询、避免对预取对象作新的查询、使用 defer() 防止获取大的未使用字段、避免在大字段上使用 distinct() 。
有时候我们会在编程语言中看到一些奇怪的现象,它们可能是一些非常冷门的“特性”,也可能会让人误以为是 bug 或者因理解错误而造成 bug。作者介绍了他的几个小发现。
可汗学院使用 Python 做了 10 年的主力语言,然而在 2020 年前后彻底转向了 Go 阵营。这篇文章介绍了它为什么以及如何将 Python 2 后端整体重构成 Go 服务。文中引用了可汗学院总结性的一系列博客,可作延伸阅读。
这是一篇思考编程语言该如何设计的长文!作者指出现代编程语言存在“静态-动态双形性”问题,提出理想的编程语言应该同时具有静态和动态的特性。文章分析了 Idris 和 Zig 两种语言的做法,并指出其局限性,最后提出应该重新思考编程语言。
Python潮流周刊已免费发布了 16 期,访问下方链接,即可查看全部内容:https://pythoncat.top/tags/weekly
原文:https://pythoncat.top/posts/2023-08-19-weekly
️项目&资源
一个基于 Conda 生态的包管理器,支持所有操作系统,支持多种语言的 Conda 包,拥有类似 Cargo 的命令行界面,完全用 Rust 编写。支持按照项目来安装包,也支持全局安装,此行为类似于 pipx 和 condax。

2、briefcase:将 Python 项目转换为独立的应用
支持打包成 Mac、Windows、Linux、Android 和 iPhone 的应用,以及使用了 PyScript 作客户端的静态 Web 站点。(star 2K)
上周的热门项目,仅需三张照片即可生成个人的数字分身。底层使用了 Stable Diffusion 的文生图功能,训练时可选择多种风格的 LoRA 模型,也支持添加个性化的 prompt,实现变装效果。(star 3.2K)
4、modelscope:将 Model-as-a-Service 概念变为现实
“模型即服务”(MaaS)汇集 AI 社区中最先进的机器学习模型,并简化在实际应用中使用 AI 模型的流程。它已有 700+ 模型,涵盖自然语言处理、计算机视觉、语音、多模态等。(star 3.6K)
不是根据体裁和书名等常规条件,而是根据提示语来搜索相关的书籍。基于双塔语义检索模型 ,使用 DuckDB 在本地训练数据,使用 Redis Search 模块作检索,通过 Flask API 和 Bootstrap 前端展示结果。

它为开源维护者搭建一个平台,可便捷地设置、运营、推广面向支持者的增值及订阅服务,帮助开发者从开源项目中获取收入。这个项目已获得 180 万美元的种子轮投资。
一个很有意思的游戏!你需要扮演操作系统,管理进程、内存和 I/O 事件,不能让进程空闲太久,不然就 game over!项目依赖 Python 3.11 和 pipenv,也可以上这个网站在线体验 。(star 1K)

这个项目从头实现一个关系型数据库,借鉴了 sqlite 数据库。关键的特性:支持丰富的 sql、使用lark 构建自定义词法分析与解析器、支持用户和代理方式连接、实现 BTree 作数据存储。
比其它多进程库更快,且功能更多:结合了 multiprocessing.Pool 使用写时复制的共享对象的优点、有丰富的状态管理功能、使用 tqdm 实现进度条、支持在仪表板查看进度,等等。(star 1.5K)
如何比对一个软件在两个版本间的差异?比较二进制软件的差异时,涉及哪些匹配技术?这个项目号称是目前最强的软件差异比对工具!(star 3.1K)

一个近实时(NRT)的纯 Python 运行时类型检查工具,将 Rust 和 C++ 的零成本对象带入动态类型的 Python 世界。它可有选择性地将 Python 的鸭子类型转换成静态类型,同时默认保留前者的优点。项目文档中称“你可以同时像鸭子一样嘎嘎叫,以及像熊一样咆哮”!(star 2K)
这个仓库收录了 200 多本计算机科学类书籍,仅限教育用途!
播客&视频
这个视频出自 PyCon 2015,介绍如何写出优雅的 Python 代码。在油管上已有 8200+ 点赞。演讲者 Raymond Hettinger 参与贡献了大家熟知的很多 Python 特性,比如 enumerate() 函数、生成器表达式、OrderedDict()、条件表达式、set 对象等。
2、只需 5 个步骤,将“勉强能用”的代码变成 Pythonic
写出能用的代码不应该成为最终目标,这只是一个开始!这个视频使用了__getitem__、__len__、__enter__ 和 __exit__ 等魔术方法,将难以维护的代码重构得 Pythonic。作者自称这是对上一则分享的 8 分钟浓缩版。
赞助&支持
如果你喜欢周刊,请分享给其他需要的同学,让更多人可以从中受益~
欢迎订阅
- 微信公众号:除更新周刊外,还发布其它原创作品,并转载一些优质文章。(可加好友,可加读者交流群)
- 博客 及 RSS:我的独立博客,上面有历年原创/翻译的技术文章,以及从 2009 年以来的一些随笔。
- Github:你可以获取本周刊的 Markdown 源文件,做任何想做的事!
- 邮件:在 Substack 上开通的频道,满足你通过邮件阅读时事通讯的诉求。
- Telegram:除了发布周刊的通知外,我将它视为一个“副刊”,补充发布更加丰富的资讯。
- Twitter:我的关注列表里有大量 Python 相关的开发者与组织的账号。
Python 潮流周刊#16:优雅重要么?如何写出 Pythonic 的代码?的更多相关文章
- Python进阶系列之怎么写出pythonic的代码
使用 in/not in 检查key是否存在于字典中 判断某个key是否存在于字典中时,一般的初学者想到的方法是,先以列表的形式把字典所有的key返回,在判断该key是否存在于key列表中 d = { ...
- Python推导式详解,带你写出比较精简酷炫的代码
Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...
- 开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码
开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows
- Python写出LSTM-RNN的代码
0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask.本文属于作者一边学习一边翻译的作品,所以在用词.理论方面难免会 ...
- 写出pythonic的python代码
http://www.cnblogs.com/dadadechengzi/p/6226071.html 1,列表推导(没当要对序列中的内容进行循环处理时,就应该尝试使用列表推倒) 在python中编写 ...
- 如何写出优雅又地道的Python代码?【转载】
在Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic.一般说地道(idiomatic)的python代码,就是指这份代码很pyth ...
- 写出优雅又地道的pythonic代码(转自网络)
本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片). 示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺 ...
- 如何写出优雅的 Golang 代码
原文: https://draveness.me/golang-101.html Go 语言是一门简单.易学的编程语言,对于有编程背景的工程师来说,学习 Go 语言并写出能够运行的代码并不是一件困难的 ...
- Guava - 拯救垃圾代码,写出优雅高效,效率提升N倍
最近在看一个同学代码的时候,发现代码中大量使用了 Google 开源的 Guava 核心库中的内容,让代码简单清晰了不少,故学习分享出 Guava 中我认为最实用的功能. Guava 项目是 Goog ...
- Centos6.10 安装Python 2.7.16
部署一个程序, 系统环境:CentOS 6.10 64位 Python版本:2.7 1.升级下系统 yum install eple-release -y yum update -y 2.下载pyth ...
随机推荐
- 2022-07-11:给定n位长的数字字符串和正数k,求该子符串能被k整除的子串个数。 (n<=1000,k<=100)。 来自微众。4.11笔试。
2022-07-11:给定n位长的数字字符串和正数k,求该子符串能被k整除的子串个数. (n<=1000,k<=100). 来自微众.4.11笔试. 答案2022-07-11: 动态规划. ...
- 2021-09-27:Pow(x, n)。实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x**n)。力扣50。
2021-09-27:Pow(x, n).实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x**n).力扣50. 福大大 答案2021-09-27: 遍历n的二进制位. 时间复杂度:O( ...
- SpringIOC个人笔记
上一章讲解了SpringBoot中的 AutoConfiguration自动装配,而这一章就来讲讲自动装配时会用到的Spring三大特性之一的IOC控制反转. 使用过Spring的人都熟知,Spr ...
- 【密码学】为什么不推荐在对称加密中使用CBC工作模式
引言 这篇文章是我在公司内部分享中一部分内容的详细版本,如标题所言,我会通过文字.代码示例.带你完整的搞懂为什么我们不建议你使用cbc加密模式,用了会导致什么安全问题,即使一定要用需要注意哪些方面的内 ...
- 新风向标:学术界开始从 Python 转向 Rust
作者 | Jeffrey M. Perkel 策划 | Tina 来源 | Rust语言中文社区 Rust 现在已经越来越受到科学家们的欢迎了,比起 Python,Rust 有着更高效的性能,同时在社 ...
- 驱动开发:内核扫描SSDT挂钩状态
在笔者上一篇文章<驱动开发:内核实现SSDT挂钩与摘钩>中介绍了如何对SSDT函数进行Hook挂钩与摘钩的,本章将继续实现一个新功能,如何检测SSDT函数是否挂钩,要实现检测挂钩状态有两种 ...
- 使用Docker将Vite Vue项目部署到Nginx二级目录
Vue项目配置 使用Vite创建一个Vue项目,点我查看如何创建 配置打包路径 在Nginx中如果是二级目录,例如/web时,需要设置线上的打包路径 在项目跟路径下创建两个文件:.env.produc ...
- 【后端面经-Java】Java创建线程的方法简介
目录 1. 线程的基本概念 1.1 线程 1.2 线程状态和生命周期 2. 创建线程的四种方法 2.1 继承Thread类 2.2 实现Runnable接口 2.3 实现Callable接口 2.4 ...
- 【whale-starry-stl】01天 list学习笔记
一.知识点 1. std::bidirectional_iterator_tag std::bidirectional_iterator_tag 是 C++ 标准库中定义的一个迭代器类型标签,用于标识 ...
- range嵌套range beego前端页面渲染
range嵌套range beego前端页面渲染 问题 listA(name,age...) listB(hobby...) 有多个不同的list 对象,在前端中需要用range渲染,但是多个list ...