|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Python 周报 #4 | 2020-05-24" |
| 4 | +permalink: /4 |
| 5 | +--- |
| 6 | + |
| 7 | +Python 周报,提供有价值的 Python 及行业相关信息。 |
| 8 | + |
| 9 | +如果你发现了有价值的信息、文章和工具等,可以到 [Issues](https://github.com/qiwihui/PythonWeekly/issues) 里提给我,记得写上推荐的理由。也欢迎提出意见和建议。 |
| 10 | + |
| 11 | +## :newspaper_roll: 新闻 |
| 12 | + |
| 13 | +### [Microsoft OpenAI 可以基于函数签名和注释编写 Python 代码](https://www.youtube.com/watch?v=fZSFNUT6iY8) |
| 14 | + |
| 15 | +看起来有意思。 |
| 16 | + |
| 17 | +## :pencil: 文章和教程 |
| 18 | + |
| 19 | +### [Python 的子解释器](https://lwn.net/Articles/820424/) |
| 20 | + |
| 21 | +一个已经在 Python 世界中流传了很多年的项目现在正在努力实现是否包含在该语言中。“子解释器”是当前可以通过 C API 扩展创建的独立的 Python 解释器,在某些情况下被视为一种获得更像 Go 的 Python 并发模型的方式。实现该目标的第一步是在标准库中公开该 API。但是,有一个问题是子解释器实际上是否真的是 Python 的理想功能,以及是否希望实现并发性改进。 |
| 22 | + |
| 23 | +### [Python 与 JavaScript 对比](https://realpython.com/python-vs-javascript/) |
| 24 | + |
| 25 | +Python 和 JavaScript 是世界上最流行的两种编程语言。在这篇教程中,你将通过比较 Python 与 JavaScript 来深入了解 JavaScript 生态系统。你将从Pythonista 的角度学习术语,语言历史和最佳实践。 |
| 26 | + |
| 27 | +## [Patio11 定律](https://secondbreakfast.co/patio11-s-law) |
| 28 | + |
| 29 | +[Patio11](https://twitter.com/patio11) 是推特上知名的程序员,上周针对软件市场的纵深程度发表了看法,而后被人总结成 Patio11 定律:软件市场远比你想象得要大得多,即使你考虑了 Patio11 定律: |
| 30 | + |
| 31 | +- 只有 7% 的软件被 TechCrunch、Recode 以及 HN 等主流提及 |
| 32 | +- 细分如葬礼服务的软件可以达到千万美金年销量 |
| 33 | + |
| 34 | +### [Python 缓存整数](https://arpitbhayani.me/blogs/python-caches-integers) |
| 35 | + |
| 36 | +Python 中的整数不是传统的2、4或8字节实现,而是将其实现为以 2^30 为基的数字数组,这使 Python 支持超长整数。由于大小没有明确限制,因此在Python中使用整数非常方便,因为我们可以对很长的数字进行运算,而不必担心整数溢出。这种便利的代价是分配成本高昂,而琐碎的运算(例如加法,乘法,除法)效率低下。 |
| 37 | + |
| 38 | +可以观察到,与其他较长的整数相比,-5 至 256 范围内的较小整数被非常频繁地使用,因此为了获得性能优势,Python 在初始化过程中预先分配了该整数范围,并使它们成为单例,因此每次都使用较小的整数值引用而不是分配新的整数,然后传递相应单例的引用。 |
| 39 | + |
| 40 | +### [理解 Python 装饰器](https://rednafi.github.io/digressions/python/2020/05/13/python-decorators.html) |
| 41 | + |
| 42 | +装饰器可以使你能够向任何可调用对象添加新功能,而无需实际触摸或更改其中的代码。通常,这可以产生更好的封装,并帮助你编写更简洁,更易理解的代码。但是,装饰器在 Python 中被认为是相当高级的主题,因为理解和编写装饰器需要你对多个附加概念(例如,一级对象,高阶函数,闭包等)进行命令。这篇文章将尝试根据需要介绍这些概念,然后逐层展开装饰器的核心概念。 |
| 43 | + |
| 44 | +### [当你在浏览器中输入 google.com 并且按下回车之后发生了什么?](https://github.com/skyline75489/what-happens-when-zh_CN) |
| 45 | + |
| 46 | +这个仓库试图回答一个古老的面试问题:当你在浏览器中输入 google.com 并且按下回车之后发生了什么?不过我们不再局限于平常的回答,而是想办法回答地尽可能具体,不遗漏任何细节。 |
| 47 | + |
| 48 | +### [我如何从 GitHub 敏感信息泄漏中获得 $10K 赏金](https://tillsongalloway.com/finding-sensitive-information-on-github/index.html) |
| 49 | + |
| 50 | +API 密钥,密码和客户数据每天都意外地发布到GitHub。黑客使用这些密钥登录服务器,窃取个人信息,并蓄积荒谬的AWS费用。GitHub泄漏可能使公司蒙受数千乃至数百万美元的损失。在 GitHub 上收集开源情报已成为每一个安全研究人员的强大工具:来自 NC State 的研究人员甚至撰写了有关该主题的学术论文。本文是为漏洞赏金猎人和企业信息安全团队编写的,展示了用户发布到公共 GitHub 存储库中的敏感信息(秘密)的常见类型,以及用于查找它们的启发式方法。本文中的技术也可以应用于 GitHub Gist 片段。 |
| 51 | + |
| 52 | +### [优化 Django ORM 查询](http://schegel.net/posts/optimizing-django-orm-queries/) |
| 53 | + |
| 54 | +Django ORM(对象关系映射)是 Django 最强大的功能之一。它使我们能够使用 Python 代码而不是 SQL 与数据库进行交互。 |
| 55 | + |
| 56 | +它具有多个优点: |
| 57 | + |
| 58 | +- 数据库引擎是从我们这里抽象出来的,因此可以轻松切换到另一个数据库系统。 |
| 59 | +- 它支持迁移:我们可以通过更新模型轻松地更改表,并且 Django 将自动生成更新数据库表所需的迁移脚本。 |
| 60 | +- 它支持事务:你可以在一个事务中对数据库进行多次更新,如果失败,则将其回滚到开始时的状态。 |
| 61 | + |
| 62 | +但这也有一些缺点: |
| 63 | + |
| 64 | +- 由于它是基于SQL的抽象,因此晦涩难懂,因此我们无法确切知道将从我们的 Python 代码生成哪些 SQL 查询。 |
| 65 | +- Django 无法猜测何时需要使用相关表,因此在需要它们时不会为我们做 `JOIN`。 |
| 66 | +- ORM 给我们一种错误的感觉,即我们所做的事情并不昂贵。我们没有简单的方法知道访问对象中的属性可能会触发对数据库的查询,而这可能是用 `JOIN` 替代的。 |
| 67 | + |
| 68 | +为了克服这些缺点,我们需要更加了解它,并了解背后发生的事情。 |
| 69 | + |
| 70 | +### [使用Celery(和其他任务队列)的常见问题](https://adamj.eu/tech/2020/02/03/common-celery-issues-on-django-projects/) |
| 71 | + |
| 72 | +这是在使用Celery的Django项目中多次遇到的一些问题,它们可能适用于其他任务队列。 |
| 73 | + |
| 74 | +1. 在插入队列时数据而不是引用; |
| 75 | +2. 在数据库事物中插入任务队列; |
| 76 | +3. 在任务中不要使用数据库事务; |
| 77 | +4. 默认的“不公平”任务分配; |
| 78 | +5. 在遥远的未来中使用长 `lockdown` 或 `eta`; |
| 79 | +6. ACKS 行为; |
| 80 | +7. 不要重试失败的任务; |
| 81 | +8. 以向后不兼容的方式更改任务签名; |
| 82 | + |
| 83 | +### [浮点数如何导致了 4.92000008 级地震?](https://coderemixer.com/2020/05/22/how-floating-number-caused-strange-earthquake/) |
| 84 | + |
| 85 | +刚收到一个地震速报,说美国发生了一场 M4.92000008 级地震。这个数字实在太过于微妙,我们很少见到精确到小数点后那么多位的地震级数。News Digest 网站迅速删除了这篇报道,并且补上了一篇 M4.9 级的报道。 |
| 86 | + |
| 87 | +然而,这么奇怪的地震级数是怎么发生的? |
| 88 | + |
| 89 | +相关阅读:[为什么 0.1 + 0.2 = 0.300000004](https://draveness.me/whys-the-design-floating-point-arithmetic/) |
| 90 | + |
| 91 | +### [如何弃用PyPI包](https://www.dampfkraft.com/code/how-to-deprecate-a-pypi-package.html) |
| 92 | + |
| 93 | +你如何弃用已发布到 PyPI 的 Python 软件包并希望人们停止使用?你应该删除吗?查看本指南以了解完成此任务的几种方法。你还可以尝试 PyPI 支持的新 [yank](https://www.python.org/dev/peps/pep-0592/) 功能。 |
| 94 | + |
| 95 | +### [使用 Python 建立 Markdown 到 HTML 转换流程](https://florian-dahlitz.de/blog/build-a-markdown-to-html-conversion-pipeline-using-python) |
| 96 | + |
| 97 | +在本系列文章中,我想向你展示如何为构建自己的 markdown 转 HTML 生成器。该系列包括三个部分: |
| 98 | + |
| 99 | +- 第1部分 介绍了整个生成流程的实现。 |
| 100 | +- 第2部分 通过一个模块扩展了实现的管道,该模块用于计算给定文章的估计阅读时间。 |
| 101 | +- 第3部分 演示了如何使用管道生成自己的 RSS feed。 |
| 102 | + |
| 103 | +### [JupyterDash 介绍](https://medium.com/plotly/introducing-jupyterdash-811f1f57c02e) |
| 104 | + |
| 105 | +JupyterDash,新库,可轻松从 Jupyter 环境构建 Dash 应用程序。这篇文章向你介绍JupyterDash的功能。 |
| 106 | + |
| 107 | +### [适用于 Python 和 Docker 的安全扫描程序:从代码到依赖项](https://pythonspeed.com/articles/docker-python-security-scan/) |
| 108 | + |
| 109 | +你不想将不安全的代码部署到生产中,但是很容易漏过错误和漏洞。因此,你需要一种无需考虑即可自动捕获安全问题的方法。 |
| 110 | + |
| 111 | +这就是安全扫描程序的用武之地。它们不会解决你的所有问题──所以,你仍应当使用主动指出不安全依赖的服务。但是,你可以在构建或持续集成系统中进行一些自动检查,以帮助发现问题。 |
| 112 | + |
| 113 | +对于打包在 Docker 中的 Python 应用程序,漏洞可能发生在几个地方: |
| 114 | + |
| 115 | +- 你的代码。 |
| 116 | +- 你代码的 Python 依赖项。 |
| 117 | +- Docker 镜像中包含的系统软件包(Debian / CentOS / Ubuntu 等) |
| 118 | + |
| 119 | +这篇文章提供了这些情况下的检查方法。 |
| 120 | + |
| 121 | +### [用于 Web 开发的自托管工具](https://www.mskog.com/posts/self-hosted-tools-for-web-development/) |
| 122 | + |
| 123 | +拥有一些自托管的服务和工具可以使你作为开发人员的生活以及总体上的生活变得更加轻松。作者将在这篇文章中分享一些他的最爱。作者几乎将这些用于每个项目,它们确实使他的生活更轻松。 |
| 124 | + |
| 125 | +除 OpenFaaS 之外,所有这些都托管在具有2个 CPU 内核,8GB RAM 和 80GB SSD 的单个VPS上,并具有足够的备用容量。 |
| 126 | + |
| 127 | +### [构建 FunctionTrace,一个图形化的 Python 分析器](https://hacks.mozilla.org/2020/05/building-functiontrace-a-graphical-python-profiler/) |
| 128 | + |
| 129 | +## :office: 项目,软件包和代码 |
| 130 | + |
| 131 | +[python-keyboard](https://github.com/makerdiary/python-keyboard):由 Python 驱动的手工连线 USB 和 BLE 键盘 |
| 132 | + |
| 133 | +[py-spy](https://github.com/benfred/py-spy):适用于Python程序的采样探查器 |
| 134 | + |
| 135 | +py-spy 是 Python 程序的采样分析器。它使你可以直观地看到 Python 程序花费的时间,而无需重新启动程序或以任何方式修改代码。py-spy 的开销非常低:它是用 Rust 编写的,以提高速度,并且与配置的 Python 程序不在同一进程中运行。这意味着 py-spy 可以安全地用于生产 Python 代码。 |
| 136 | + |
| 137 | +py-spy 可在 Linux,OSX,Windows 和 FreeBSD 上运行,并支持对所有最新版本的 CPython 解释器(2.3-2.7和3.3-3.8版)进行性能分析。 |
| 138 | + |
| 139 | +<!-- ## :books: 书籍 |
| 140 | +
|
| 141 | +不错的书的推荐。 --> |
| 142 | + |
| 143 | +## :tv: 音视频 |
| 144 | + |
| 145 | +### Talk Python To Me ── [Python 为什么慢](https://talkpython.fm/episodes/show/265/why-is-python-slow) |
| 146 | + |
| 147 | +关于 Python 是快还是慢的争论永无止境。这取决于你要优化的内容:服务器 CPU 消耗?开发时间?可维护性?有很多因素。但是,如果我们继续关注 Python 层中的纯计算速度,那么是的,Python 很慢。 |
| 148 | + |
| 149 | +在本集中,我们再次邀请到 Anthony Shaw。 他在这里探讨 Python 比其他许多同等语言和技术(例如 C++ 和 JavaScript)计算速度慢的原因。 |
| 150 | + |
| 151 | +## :coffee: 关注我们 |
| 152 | + |
| 153 | +RSS 订阅:[PythonWeekly RSS](https://pyweekly.qiwihui.com/feed.xml) |
0 commit comments