您好,欢迎收听 Python Bytes,我们将直接为您带来 Python 新闻和头条新闻。这是第 412 集,录制于 2024 年 12 月 2 日星期一。我是 Michael Kennedy。我是 Brian Ocken。本期节目由我们赞助,特别是我们的黑色星期五活动。访问我们的网站了解黑色星期五活动。您有 14 个小时的时间,所以要快点。
快点。希望您能立即收听。如果没有,您知道,感谢您对我们工作的支持,并查看我们的课程等内容。链接在节目说明中。您还可以获得每周每集的摘要,直接发送给您。手工制作。手工制作的。
Brian Ocken 撰写的时事通讯。所以请查看一下。我们上次也提到了这一点,但我们现在是蓝天主义者。我们现在生活在天空中,蓝天中。特别是,Python Bytes 位于那里,句柄为 python,您知道,在 pythonbytes.fm。Brian 和我都在那里直接链接。
所以来关注我们吧。我有一些额外的东西要补充关于 Blue Sky、Mastodon 和 Twitter、X Twitter 等等所有这些内容。所以我认为您会发现这很有趣。但现在,我想知道,Brian,您觉得什么有趣。我发现循环目标存在争议很有趣。是的。
我认为这是如此内部的棒球,但是,嗯,好的。所以 Ned Batchelder 撰写了一篇博文,显然还有一篇关于……嗯……嗯……在蓝天上的社交媒体帖子。但是,嗯,
关于循环目标是什么。所以我指的是 for 循环。所以如果您说 for,例如 for X in range 10 之类的东西,那么 X 将被赋值为 10,例如从零到九。对。那么,争议是什么?争议在于您应该为 X 放入什么。在他的小代码示例中,他有一个参数字典,其中包含查询和页面大小。没有页面元素,但我们稍后会填写它。所以他正在做的是,他为 params 编写了代码,“page” in itertools count。这将做的是它将遍历并一次获取 100 个东西。
并将它们放入页面字典中,直到为空。有一个 break 用于在没有剩余结果时退出循环。我认为这很聪明,我没有看到这里的问题。所以问题是这种对字典的索引,这就是您放置循环参数的地方。是的,这很疯狂,因为我见过将元组扩展或扩展到多个事物中。例如,对于字典中的事物,
项目,您可能会说循环目标中的键、值。这是完全正常的,但是分配字典中的键,这对我来说是新的。真的吗?好的。我不一定,我对它是否应该这样做持中立态度,但我现在才刚刚了解它。好的。所以,讨论中,所以实际上发生的事情是,在讨论中,他谈到
您可以使用额外的变量。您可以说 pageNum。所以对于 iterToolsCount 中的 pageNum,它会更清晰。然后您将 pageNum 分配给,您将其分配给字典。但实际上您只是将这个 pageNum 用作临时变量,只是将其塞进去。
所以我认为,为什么不直接将其分配到您要使用它的位置呢?因为这一行额外的代码,我不知道,我有点犹豫,因为这更清晰。我认为使用临时变量更清晰。它更易读。但是,有一行额外的代码。所以它就像那样多,我认为它并没有那么容易阅读。而且它不是,而且它,如果,
如果在这个简短的代码片段中不是什么大问题,但在较大的 for 循环中,您可能更有理由让某些东西中断,因为有人像您知道的那样注释掉了该行,它突然不起作用了,无论如何,我……我……这很奇怪,这是一个争议,但即使是他,所以他写了这篇文章只是为了讨论它并询问人们的想法,大多数回复都是像不或一,我认为这是一个好主意,而且我
我认为这是一个糟糕的主意。嗯,
无论如何,我想提出这一点,因为我只想指出,对于 for 循环,有一个隐式赋值。因此,您可以使用该赋值来分配到您想要使用变量的任何位置。我将在这里做一个观察。告诉我你的想法。我相信支持这一点的人也是海象运算符的粉丝。反对这一点的人是反海象的。哦,这可能是真的。对吧?这有点像,在 for 循环中,您正在为变量赋值……
并且某种程度上定义和赋值,而您知道,海象运算符在 if 语句中这样做,但它不像赋值变量,然后测试它。它就像一次性执行赋值和测试或赋值和循环。但是 for 循环中已经有了一个赋值。它总是赋值。但它是冒号等于吗?开玩笑。是冒号在吗?不,这很有趣。它确实。是的,它是 for 循环,原始的海象运算符。好的。
我实际上要回到循环,但还不是现在。我想谈谈标准库。不,不,不是您知道的那个,不是与 CPython 一起提供的那个,而是异步标准库。它是异步世界的缺失工具箱。您知道我们生活在一个异步世界中吗?我觉得麦当娜在我的背后摇滚。那是麦当娜吗?我不知道。
是的。所以其中一个问题是,如果您查看许多您熟悉和喜爱的事物,例如 iter 工具或 func 工具,这些事物尚未……让我大吃一惊,因为它们可以……尚未更新以支持异步。哦。
好的。所以当您执行诸如 functools 之类的事情时,您知道,例如 functools.lru_cache 装饰器,这非常适合同步函数。它不适用于异步函数。为什么我认为它应该为此工作?因为就在几周前,我介绍了我的变色龙烧瓶功能。
模板装饰器。我在 100 行代码中编写了一些可以装饰和操作同步和异步函数的内容。所以当然,创建异步 IO 的人可能可以编写一个多运算符装饰器交易,但他们没有。我不知道是否有任何
打算让他们这样做。所以这是什么,它有点像这些东西的克隆。并非完全如此。它还有一些其他不错的功能,但它就像这些东西的异步版本。所以如果您有一个异步函数,您想对其应用 LRU 缓存。好吧,去拿这个坏家伙。
所以它有很多内置函数,例如异步 zip sum 甚至转换列表。它具有支持诸如我讨论过的 LRU 缓存之类的功能的 func 工具。如果您查看它,它看起来与您想象的非常相似。它具有最大大小。它有……
类型化等等,但它操作于 awaitables 并返回一个 LRU 异步可调用对象,您可以像应该那样等待函数,而不是仅仅是一个协程,我不知道,您缓存协程。我不知道。这没有多大意义。所以这就是它的意义所在。它有很多这样的东西。它有内置函数。它有用于迭代器的 functools 库、异步缓存、属性、上下文库、异步上下文库。所以
我可以做一些事情,例如添加一个异步上下文装饰器,它派生自上下文装饰器。您基本上可以对 a_enter 和 a_exit 的简单实现进行短路。它有一个堆队列,它实现了 Python 的堆队列,但用于异步,这很酷。所以你想合并东西。然后它有一些额外的工具。我还没有对此进行足够的了解,以了解这是否有用,我将如何使用它。所以坚持下去。无论如何。
它有诸如 borrow 之类的东西,您可以借用异步迭代器以防止其关闭。好的,我不了解这一点。你有作用域的。但这个非常好。我以前写过这段代码,要完全正确并不容易。它有一个您可以调用的东西,asyncstandardlib.sync,它给出了一个
异步函数,它会……对不起,另一种方式,给定一个同步函数,它会将其转换为一个异步函数,如果您需要可以等待它,或者……是的,或者您也可以给它一个异步函数,它并不关心,我认为它会适应,所以这里有很多东西,如果您像啊,有很多我习惯使用的这些很酷的内置函数,它们不适用于异步,那么请查看异步标准库
非常酷。我认为我们有类型化的 Python 和非类型化的 Python,现在我们有异步 Python 和同步 Python,然后我们将有自由线程的和非自由线程的 Python。我们将拥有类型化的异步自由线程 Python。是的。以及那里所有其他组合可能性。这将是疯狂的。是的。但我认为这是一个很酷的。它并不很流行。让我回去。
看看它的 GitHub 星星。但它有点像,是的,这绝对值得。我不知道。所以它有一些……哦,来了。不,别说了。240。所以它开始加速了。但我认为它很简单。它就像那种要么有效要么无效的东西。所以如果它对您有用,那就去做吧。好。是的,很酷。嗯……
我要谈论的是,我还没吃早餐,所以我要谈论一些,也许是吃个百吉饼。你想吃百吉饼吗?好的。我的意思是,我喜欢百吉饼。只要他们什么都有,我们就没事了。所有百吉饼。走吧。好吧,我正在查看一个名为 Enhanced Jack 的项目。它来自 Enhanced Jack,名为 Bagels。Enhanced Jacks 是谁?是 Jack Tam。酷。有抱负的学生正在学习。哦,不错。大学生。酷。无论如何,为什么我要提起百吉饼呢?好吧,百吉饼是……是……
是一个非常有趣的支出追踪器,但我认为它是使用 Textual 的一个很好的例子,人们可能很容易理解。所以它是一个使用 Textual 的具有多个帐户的支出追踪器。我试过了。它真的很容易。我喜欢它的一些东西。我提出它,并不是因为我认为每个人都需要一个支出追踪器,但我认为很多人都在寻找
启动器,例如一个启动器项目,可以对其进行调整并使其成为自己的项目。我认为这可能是人们查看一些内容的有趣的事情。我喜欢它在命令行中,它是一个文本应用程序,但它的安装说明也是如此。我喜欢看到这一点,它开始使用 UV 工具安装,这样您就可以从任何地方运行百吉饼。这就是方式,这就是方式,这就是方式。
而且开始使用起来非常快。我还喜欢这个项目很新,但才开始几周。但已经包含了一些功能。包含的功能很棒。然后还有如何列出开发设置以及如何……不,它没有谈论如何运行测试,但这没关系。
它当然正在运行 PyTest。但是然后是他们想要添加的各种事情的路线图
它受到了 posting 的强烈启发。无论如何,只是一个有趣的项目。测试到位。它还不是完整的覆盖率,但它是一个新项目。所以如果你想帮忙,我认为这是人们应该检查的好东西。此外,我一直想编写我自己的小型支出追踪器。所以这是一个很好的开始,即使它没有做我想让它做的一切,也可以使用代码库并可能使用它来学习一些……
东西。它也是,它是用……记不清了。它使用的是 Postgres,就像 SQL alchemy 一样。此外,如果您想拥有一个使用 SQL alchemy 来学习它的简单小型项目,那么这是一个很好的选择。太棒了。是的,这真的很酷。我们已经介绍了 post、postling、posting,它叫什么?post,posting。还记得吗
那是用文本编写的终端 Postman 替代品,这很酷。是的,这就像一个梦想。它很有趣。是的,非常好。既然你提到了这个,我会把它扔在这里。不一定是相关的,但我最近偶然发现了 Maybe.co。它几乎是一家公司,但他们沿途丢失了 M。无论如何,它是一个……
用于您个人财务的完全开源操作系统,运行在 Docker 上。如果您想进行自托管,请保留所有数据私密,而不是像发送给 Intuit 或其他可能不属于它的某个地方。无论如何,人们可以查看一下。这很酷。不是认可。没有使用过,但正在考虑。我宁愿把它完整地呈现出来。我们从循环开始。让我们以循环结束。这对一个完整的圆圈来说不是很好吗?它们是圆形的,不是吗?是的。所以这是早期阶段的事情。
但 Giovanni,他是 Emmet 框架的创建者,与我们更相关的是,Grainian 异步同步基于 Rust 的 Web 服务器为 Python Bytes 和我们拥有的其他事物提供支持,他正在创建这个东西,它是 UV loop 的替代品。所以 UV loop 是一个,我认为它是,
基于 libv,我不记得它的确切起源,但它是一个循环,您可以将其作为异步 IO 事件循环实现的替代方案插入。所以
你为什么要这样做?好吧,事实证明,您可以优化一些小任务的处理。所以如果您有三个任务,一个是调用网站,一个是与数据库对话,一个是写入文件或其他任何操作,什么也不做。内置的那个很好。但是如果您有一百万个任务,并且您将其分解成很小的片段,并且它们到处跳跃,那么使用 UV loop 可以更快地进行这种杂耍。我认为这就是我们将看到 R loop 的发展方向。
所以我们的循环是在 Rust 中实现的异步事件循环,它正在进行中。它是一个正在进行的工作,尚未准备好。但我之所以在它的早期阶段就提出它,是因为它是一个非常酷的选择。我们已经看到了其他 Rust 事物(如 Pydantic 和 UV)的改进有多么显著,并且
因此,如果您对此充满热情,并且希望在它完全烘焙之前可能产生一些影响,那么您就知道,加入进来。使用方法与 UV 完全相同。超级简单。在您执行异步操作之前,您只需说 asyncio.setEventLoopPolicy,这是一个
工厂,我认为,更像是一种工厂方法,我不知道,无论如何。您只需为其提供 rloop.eventlooppolicy,这意味着每当代码创建新的事件循环时,它都将使用来自 rloop 的工厂方法,而不是内置方法。开始了。酷。是的。好吧,这就是我们的项目,对吧?我认为是的,是的。
你怎么认为?额外内容?是的,我有一些。你想让我插话吗?插话。我最近在个人生活中发生了很多事情,试图将所有事情都融入我的生活中有时很困难。所以我一直在阅读,引号中的阅读,收听 4000 周的音频书,时间管理超时。
凡人的时间管理。这是 Oliver Berkman 的一本书。我现在已经第二次收听了,在过去的几周里。我大约在一周前才拿起它。但我真的很喜欢它。它更像是一种你无法完成所有事情,但这没关系。只是如何接受生活的局限性。所以非常令人耳目一新的时间管理书籍。它也有一些实际的建议。但它很棒。所以非常……
推荐。现在是代码降临节的时间,我已经听说过……所以我肯定听说过代码降临节.com。非常酷。很多人每年都会在 12 月份做这个,来做一些小代码片段。但今天我偶然发现了 Adrian Roselli 的 2024 年开发降临日历。所以如果……代码降临节不适合你的口味,这里有很多。有一个 HTML 地狱降临日历。这里有很多代码和基于代码的降临日历。所以,嗯,
没有一个是 Python 特定的。有一个 Perl 特定的,但 C# 的网络安全降临日历。只是相当多,相当多的有趣的不同日历。CSS。如果您想学习 CSS,也许是 Joomla 降临日历,您也可以托管它。所以是的。显然他正在,自从他有了 2010 年的链接以来,它已经回去了。所以很有趣。哇。是的,如果你提前完成作业,你可以做更多的降临账户。是的。
是的,我没有。所以几年前我尝试过代码降临节,然后我意识到,在我的空闲时间里,我在工作中做了很多编码,兼职等等,所以我想要做一些绘画和烹饪之类的事情,当我做其他事情时,
其他东西。无论如何,我明白你的意思。我也是。我即使在我的业余时间里也做了很多编程,我做了更多的编程。是的。所以我不需要额外的,但我知道它可以帮助人们,特别是那些试图学习某个主题的人。如果你没有办法应用它,它可以强迫你。今天是 12 月 2 日,星期一,传统上是网络星期一。这是 python test.com 课程黑色星期五促销的最后一天。但是,它是,
所以我会取消自动。但是如果,
如果您联系我,如果您稍后收听,接近 12 月 2 日,请在 Blue Sky 上直接给我发消息,我会帮您解决。Blue Sky,这是一个很好的过渡。好的。此外,TalkPython 的黑色星期五。所以 TalkPython.fm/黑色星期五,课程库 20% 到 50% 的折扣。那里的标志很棒。图片很棒。谢谢。顺便说一句,那是纯 CSS。那是 CSS 中的一些疯狂辉光。
是的,很酷。是的,太棒了。好的。所以我们谈论蓝天。所以,你知道,上周当我完成节目的制作并将其发布到互联网上时,通常会去社交网络,我会快速发布。嘿,新剧集出来了。享受它。如果你想要它,这个结尾有一个小吉他独奏,非常有趣。所以它说最新的剧集是为 11 TLS 客户端。你好。吉他独奏是名字。我发布了它,我同时使用相同的文本发布给所有人。
X、Fostadon、Mastodon 和 Blue Sky。我只是想,嗯,我想知道参与度是什么样的。因为我不知道你感觉如何,Brian,但我感觉人们……
我尝试了又尝试让大家去 Macedon,有些人来了,但很多人没有。你知道,他们只是,你会回到 X,你会看到他们都在那里交谈。我想,伙计,我不知道。我并不一定非常反对 X。我有点反对它,但我并没有很多,但这只是,它变得不太实用,正如您稍后将看到的。不太有用。所以,你知道,你想在壁橱里和自己说话,它
太棒了。你想和其他人说话吗?不太多。无论如何,所以我的测试在这里,这是一个非科学的测试,我把它放在那里。每个平台的互动水平是多少?在我告诉你这些之前,你必须记住,
关注者、订阅者(无论他们在特定位置的称呼是什么)的数量存在巨大差异,好的?所以基本上取数字,除以关注者数量,并考虑一下,就像互动量一样。我告诉你这一点的原因是,你可能想来关注我们并加入 Blue Sky,但这有点像进入脑海。所以看看这个。所以在 X 上,我们有 27,000 名关注者,好的?在一周前发布此相同消息,我们获得了 8 个赞和 2 次转发,转发。
提升它,无论如何,是的,所以我不知道那是 2 除以 27,000,但这是一个很小的百分比,好的,在 Mastodon 上加快速度,对,它不是在 Mastodon 上加快速度,因为它遍及所有更好的诗句,相同的帖子,这里完全相同,我们有
3,000,让我看看,3,100 名关注者,好的?是的,这很好,但这几乎是九分之一,大约是这个样子,对吧?它少了很多倍,但有 4 次提升,老实说,这并不算过分,但它是,并且有 2 个收藏,2 个赞,但作为比率,它仍然多得多,因为乘以 9,对吧?是的。Blue Sky,我们已经在那里几天了,我们有类似的东西。我们只有一个,有人悬停,不同的悬停目标,
750 名关注者。是的。在 PlaySky 上关注我们。去那里。
是的。无论如何,我们有 16 个赞和 2 次转发以及一个引用帖子,然后是一些关于它的对话。而且关注者比这两个平台少 30 倍,但参与度更高。无论如何,我让你们自己判断。我只是认为这是一个有趣的实验。你怎么认为,Brian?是的,我发现 Blue Sky 更具互动性。我在……嗯……Fostodon 或 Mastodon 和 Blue Sky 上的数字大致相同。而且,
而且我会在……嗯……直觉上,我会在 Blue Sky 上获得比在 Mastodon 上多两倍的互动。是的。是的。我并不是说要反对某个社交网络或过度宣传其他社交网络。我想,人们正在努力寻找他们的社区。我认为现在社区就在这里。如果你到这里,你可以去我的账户,然后去入门包,那里有 Python 人员,你可以关注一个
一堆我们。入门体验好得多。Mastodon 的入门体验仍然感觉像是同时做出了太多决定。这就像如果你想在 Linux 上玩游戏。你可能可以。
顺便说一句,我不再使用 X 了。所以不要在那里通知我。是的。听起来不错。好的。另外几件快速的事情。在第 277 集中,我相信——我没有我的节目笔记,但我非常确定那是数字——很久以前,我谈到了 strnum,字符串枚举,它基本上是从 Python 3.11 反向移植字符串枚举,以便可以在其他地方使用它。超级酷。顺便说一句,它甚至比内置的更好。
所以我可以说,给我一个字符串枚举并从中派生一个类。这将成为一个枚举,您说那个东西。但是您有字段,只需说等于 auto、auto、auto、auto。它实际上会将其设置为变量文本是什么。如果您重构,重命名它,它会将重构应用于字符串版本和它的变量版本。你甚至可以做一些事情,比如
使用小写或大写作为基类,小写 strenum,这将使字符串版本小写,即使您对变量名称有不同的表示。无论如何,我为什么要这样做?因为在我的 ListMonk 小客户端上,有人过来问我,为什么这在 311 以下的任何版本上都不起作用?我说,因为它使用了 311 中的 strenum。所以我说,你知道吗?我会为另一个类 strenum 派生。
将其添加为依赖项。我已经有了依赖项。这是一个更小的。你猜怎么着?现在它支持旧版本的 Python。我将其停止在 3.10,因为我想要漂亮的类型提示。我不想有难看的类型提示。你比我更好,伙计。我说,它不支持它。所以它不支持,因为我不想支持它。
是的,但我很好奇,为什么不呢?我记得我们谈论过这个东西,如果我字面意思上只是更改了一个基类而没有做任何其他事情,那工作量就非常低。所以,你知道,它花了大约五分钟,对吧?好的。是的。所以无论如何。好的。这就是我的额外内容。我们开始吧?
用一个笑话来结束。是的,让我们来听点好笑的。伙计,我知道我们刚刚在谈论,我们上周在美国刚刚经历了一个美食节日,感恩节等等,如果你们庆祝的话,我希望每个人的节日都过得愉快。然而,有时会有很多食物准备工作,这可能会很困难,对吧?这可能会很难。比如你在购物,你在切菜,所有这些事情。所以这里有一个程序员,或者只是一个电脑用户,他有一个购物清单,购物清单上写着鸡蛋、玉米、西红柿、洋葱、米饭、牛奶,
他们决定不要洋葱。所以他们高亮显示它,然后按下Ctrl+X,他们的眼睛里就流下了一滴泪,因为当你切洋葱的时候,当然会这样。
这真的很有趣。非常好,对吧?我的意思是,是的,很好。我不知道。有点俗气。有点俗气。好吧,很简单。是的。是的。我再给大家讲一个。这是直接从评论中摘出来的,因为科恩讲了一个很好的笑话。当我们谈论循环目标时,它说,怎么样?我们把两个有争议的想法放在一起。数字的总和加上X,对于数字中为零的数字
数字如果X:等于数字的平方是如此等等,哦,我的天哪。这是很多事情。我说,这是一个面试题。面试问题。如果你面无表情地回答,你就失败了。
- 如果你认为这没问题,不,你出局了。我不知道,不是认真的,但作为一个笑话,它还不错。- 是的,这是面试的内容。面试很难。我知道很多人现在都在经历这个。- 是的,你知道,Ctrl+X部分和面试都可能会让人流泪。我不知道,我已经很久没有申请工作了,嗯,自90年代以来就没有了。
这太疯狂了。真是太疯狂了,伙计。这真的太疯狂了。但因为我所有的工作转变都是这样的,嘿,你很棒。就像,你为什么不考虑为……更像是另一种方式,你知道的,这真是幸运。但这听起来你的简历上好像还有割草之类的。没错。没错。
我为公司工作。他们只是联系我说,你愿意考虑为我们工作吗?我知道,但你可能不必这样做。你可能很久没更新简历了。是的,我的领英上写着,我在一家比萨店工作过,我还做过割草。所以,不,很好。
不,我只是想说,我认为这可能相当残酷。你必须,你知道,通过人工智能的关卡和各种奇怪的业务以及带回家的测验。我可以理解为什么会有眼泪。眼泪,是的。但不是因为听了这个节目。感谢大家的光临。谢谢你,布莱恩。回头见。再见。