Python 3.8 支持只接受位置参数了

标签:Python

今天在看 functools.cache 的源码时发现参数列表有个诡异的 /
def cache(user_function, /):
    'Simple lightweight unbounded cache.  Sometimes called "memoize".'
    return lru_cache(maxsize=None)(user_function)
翻了下文档才发现这个叫 Positional-Only Parameters

Python 源码保护的自动化构建方案

标签:Docker, Python

Python 源码保护的方案主要有代码混淆、修改解释器和编译成二进制这三种,其他方式基本没有保护效果。而这三种方案中,最安全的就是用 Cython 来编译 py 文件(但是需要注意兼容性)。

Python 的多进程编程

标签:Python

在并发编程的时候,多线程和多进程是经常会被使用的两种模式(此外还有协程等)。由于 CPython 的 GIL 限制(Jython 和 IronPython 没有 GIL,PyPy 在尝试去掉 GIL),只有获取了 GIL 的线程才能使用 CPU,所以除了需要处理一些可能会阻塞的 IO(读写文件、访问网络等)之外,基本没人会去使用 CPython 的多线程。因此,本文就来说说更有用的 Python 多进程编程。

用 Python 3 的 async / await 做异步编程

标签:Python

前年我曾写过一篇《初探 Python 3 的异步 IO 编程》,当时只是初步接触了一下 yield from 语法和 asyncio 标准库。前些日子我在 V2EX 看到一篇《为什么只有基于生成器的协程可以真正的暂停执行并强制性返回给事件循环?》,激起了我再探 Python 3 异步编程的兴趣。然而看了很多文章和,才发现极少提到 asyncawait 实际意义的,绝大部分仅止步于对 asyncio 库的使用,真正有所帮助的只有《How the heck does async/await work in Python 3.5?》《A tale of event loops》这两篇。

Python 项目的配置管理

标签:Python

每次开始一个新的 Python 项目,我都会为怎么管理配置文件而头疼。不过在迁移我的博客时,终于有空花了点时间,把这件事想清楚。
一年多的时间过去了,一切似乎都很顺利,连我在知乎所做的新项目也沿用了该方案,于是决定把解决方案记录下来。

初探 Python 3 的异步 IO 编程

标签:Python

上周终于把知乎日报的新版本做完了,于是趁着这几天的休息,有精力折腾一些感兴趣的玩意了。
虽然工作时并不会接触到 Python 3,但还是对它抱有不少好奇心,于是把 Python 版本更新到了 3.4,开始了折腾之旅。

我有特别的 Python 加密技巧

标签:Python

虽说 Python 代码的可读性很高,但你能读懂下面的代码么?
# -*- coding: rot_13 -*-

cevag 'uryyb jbeyq!'.rapbqr('rot_13')
嗯,它只是个 hello world 而已。

我有特殊的 Python 补全技巧

标签:Python

平时在用 Python 的命令行来调试时,由于没有 IDE / 编辑器的代码补全,总会觉得比较累。
受不了的人就用起 IPython、bpython 来了。可问题是装这些玩意得下载啊,如果只是临时用用,实在太不方便了。
还好 Python 自带了一个 rlcompleter 模块,几行代码就能解决这个问题。

Python 装逼篇之 Ellipsis

标签:Python

刚才无聊时折腾了一个高端大气上档次的等差数列生成器,演示结果如下:
>>> maker = ProgressionMaker()
>>> maker[1, 2, ..., 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> maker[6, 13, ..., 34]
[6, 13, 20, 27, 34]
虽然看上去很厉害的样子,但其实没什么技术含量……

« 看看还有什么好玩意