Other articles


  1. [翻译] 探索 Python 代码对象

    原文:Exploring Python Code Objects

    由于受到 David BeazleyPyCon 上的 Keynote 的启发,近来我四处学习与 Python 代码对象 (code object) 相关的内容。我并没有什么特别的利器,也没有专门的任务去解决 (至今为止?),所以请将这篇文章看做一些也许有趣的记录和随笔 (如果没意思的话,抱歉)。

    免责声明:这篇文章是关于 CPython 2.7 的,虽然其中的大部分对于其他的 CPython 版本应该也是正确的 (包括 3.x)。但我不保证它在 PyPy、Jython、IronPython 等实现上是正确和适用的。

    第0步:是什么?

    所以首先,代码对象是什么呢?许多人 (特别是仇视 Python 的人 ...

    read more

    There are comments.

  2. [翻译] Python 内部:可调用对象是如何工作的

    原文:Python internals: how callables work

    【这篇文章所描述的 Python 版本是 3.x,更确切地说,是 CPython 3.3 alpha。】

    在 Python 中,可调用对象 (callable) 的概念是十分基本的。当我们说什么东西是“可调用的”,马上可以联想到的显而易见的答案便是函数。无论是用户定义的函数 (你所编写的) 还是内置的函数 (经常是在 CPython 解析器内由 C 实现的),他们总是用来被调用的,不是么?

    当然,还有方法也可以调用,但他们仅仅是被限制在对象中的特殊函数而已,没什么有趣的地方。还有什么可以被调用呢?你可能知道,也可能不知道,只要一个对象所属的类定义了 __call__ 魔术方法,它也是可以被调用的。所以对象可以像函数那样使用。再深入思考一点,类也是可以被调用的 ...

    read more

    There are comments.

  3. [翻译] 在 Python 中使用模糊匹配根据发音搜索

    原文:Using Fuzzy Matching to Search by Sound with Python

    当你编写代码搜索数据库时,你不能总是依赖于相信所有的数据项都有正确的拼写。DreamHost 的开发者以及《Python 标准库编程范例》(The Python Standard Library by Example) 的作者 Doug Hellmann 在这篇文章中回顾了一些根据目标的发音,而不是准确的拼写,进行数据库搜索的方法。

    在数据库中搜索人名是一项独特的挑战。对于不同来源和不同年代的数据,你不但不能指望其中名字的拼写是正确的,甚至相同的名字如果多次出现时,它们的拼写都不一定一样。而储存的数据和搜索项之间也有可能因为个人喜好、文化差异、同音词、拼写错误、文盲或仅仅因为在某些时期根本没有标准拼法而出现差异。这些问题在历史学家、谱系学家和其他研究者的手写的文本记录中尤为常见。

    一个常用的解决这样的字符串搜索问题的方法是寻找与搜索目标相近的值。但是,使用传统的模糊匹配算法计算两个任意字符串之间的相似度,代价是很大的,同时它也不适合用于搜索大规模数据集。一个更好的解决方案是为数据库里的每一项预先计算一个哈希值,有一些专门的哈希算法正是为此设计的。这些语音算法 ...

    read more

    There are comments.

  4. [翻译] AST 模块:用 Python 修改 Python 代码

    原文:Static Modification of Python With Python: The AST Module

    修改代码在有时会变的十分有用,比如在进行测试和分析的时候。在这篇文章中,我们将看到如何使用 ast 模块对 Python 代码进行修改,同时还将看到一些使用了这个技术的工具。

    CPython 的编译过程

    在开始之前,我们应该先看看 CPython 的编译过程,这个过程在 PEP 339 中有详细的描述。

    当然,在读这篇文章的时候,你并不需要对这个步骤有很深入的理解,不过这可以帮助你对整个过程有一个大体的了解。

    首先,编译器会根据源代码生成一棵语法分析树 (Parse Tree),随后,再根据语法分析树建立抽象语法树 (AST, Abstract Syntax Tree)。从 AST 中可以生成出控制流图 (CFG, Control Flow Graph ...

    read more

    There are comments.

  5. 关于饭否的两个小脚本

    前几天因为某些原因,我把饭否上所有的好友和关注者全部清空了。当然,如果没有程序的帮忙,估计还不等我删完我也就后悔了。

    我没有那么狠心的把饭否的消息给清空,因为消息是不可恢复的(而且也太多了),但好友和关注者是可以的。做事情都给自己留后路显然是我一贯的风格,不然的话,我大概早从我家阳台跳下去了……

    两段脚本都不长,第一段是备份饭否的好友列表和关注者列表的,做的毫无泛用性,因为 bash 编程我并不很熟,只知道可以用 wget 来抓取。本来这种事情其实可以直接用 API 抓的,不过我想抓下我能直接看的东西,所以最终还是导出了 Cookie 抓网页。

    第一段代码如下:

    #!/bin/bash
    
    mkdir friends
    for i in {1..11}
    do
        wget -k -e robots=off --load-cookies cookies.txt -P friends/ \
            http ...
    read more

    There are comments.

  6. 寻找更高仿的 ID 第二季

    继上一篇文章之后,我又下大力气对这个程序做了许多修改,在精确度和速度方面似乎都有些许提高。在此推出第二季~

    使用真正的 12px 宋体

    在上一次的程序中使用的 PIL 似乎是因为不支持宋体 ttc 文件中对于小字体下优化的点阵形式,才在选择小于 19px 的字号时不能正确渲染汉字。考虑到这一点,我就想到把 ttc 文件里面 12px 的点阵字体单独提取出来使用,毕竟贴吧上面显示 ID 都是用这个字号显示的。

    使用 FontForge 提取出来了 simsun-12.bdf 文件,就是宋体 12px 下的点阵。参考 PIL 的手册,发现 PIL 不能直接使用 .bdf 文件,需要使用一个叫做 pilfont 的脚本转换成专有的 .pil 文件才行。我想转换就转换呗。simsun-12.bdf 一个 ...

    read more

    There are comments.

  7. 寻找更高仿的 ID

    今天大学军训完了,不想做什么正经事,就想到前一段时间想做的寻找相似汉字的程序,用以寻找更高仿的贴吧 ID。用程序来寻找相似汉字,从另一个角度,也是从 Matrix67 大牛的一篇日志里得到的启发。不过 Matrix67 大牛使用的是 Mathematica 来寻找,我不大会 Mathematica,就想用我熟悉的 Python 来解决,毕竟 Python 是一个很强大的东西~

    其实寻找的思路很简单,就是把某个汉字当作图片弄出来,让后对比两个图片的相似程度。因此做这个程序的第一步就是研究如何用 Python 处理图片和文字。Python 有一个非常著名的第三方库,名叫 Python Imaging Library,简称 PIL,就是专门用来处理图片的。

    文字 to 图像

    PIL 可以很轻松的将文字转换为图像,并且提供了虽然不能说是强大,但暂时够用的图像处理函数。

    处理文字生成的图像,显然和彩色没有太大关系,因此可以使用灰度图像节省计算需要的空间和时间。此外我们知道,文字到图像有一个中间媒介 ...

    read more

    There are comments.

  8. 鼠标控制音乐播放的小程序

    看这个标题一定很奇怪:难道我以前控制音乐播放不用鼠标么?这个文章的标题看起来像鼠标刚刚发明的推广期的文章……不过,当然不是这样的!

    其实只是想:如何把我的小本合上放书架上,当作一个音乐播放器+功放,并用我的无线6键鼠当遥控器遥控控制之。

    想想其实还是蛮有意义的功能,这样我做作业的时候可以不用戴耳机,不用用MP3,直接把本当播放器;同时,我不会看到屏幕上的东西,可以安心做作业~再看看我的6键无限鼠,那额外的功能键平时根本不用,也想不出能有什么用……这么好的东西就这样被我浪费了……(话说,拿本当音乐播放器是不是更浪费?)

    说干就干!

    首先提出构想:左键用于暂停和播放,滚轮调节音量,侧边的两个功能键用来切换上一首和下一首。至于右键和中键……再说吧,说不定以后可以扩展更多功能?说不定以后高兴了弄个鼠标手势什么的~嘿嘿

    接下来查找资料。印象中我的 Audacious 是可以用 D-Bus 控制的。简单地查阅了一下相关资料,发现了一个叫做 MPRIS 的播放器控制接口。为此,我还专门学习了一下 python-dbus 的使用。

    插一句话:python-dbus 怎么没有中文教程啊 ...

    read more

    There are comments.

  9. 探索 Python 的变量、类型和引用

    我一开始为 Python 的强大和简洁所震撼,看了些 Python 的教程,学了不少东西。前面那些探索就以后再写吧……今天先讲讲今天知道的东西。

    在探索到 Python 函数的参数传递的时候,我不禁赞叹 Python 灵活的参数设计,但慢慢的,开始迷惑与传递参数的修改和返回。

    众所周知,在 C++ 中传递参数分为传值和传引用两种,但 Python 没有,那到底传进去的东西,修改一下,能不能传出来呢?这是一个很奇怪和让人费解的问题,不是么?在查阅了一些资料后,对 Python 关于变量、类型和引用的一些基本方式有了一些了解,进而基于这种理解并结合实验,了解了参数传递的奥妙。

    Python 的变量是没有类型的,这与以往看到的大部分语言都不一样。但 Python 却是区分类型的,那类型在哪里呢?事实是,类型是跟着内存中的对象走的。Python 的所有变量其实都是指向内存中的对象的一个指针,所有的变量都是!此外,对象还分两类 ...

    read more

    There are comments.

Page 1 / 1

social