"编码如何:pyxl"在Python工作?

时间:2014-01-08 09:52:49

标签: python

pyxlinterpy正在使用一种非常有趣的技巧以某种方式增强python语法:来自PEP-263coding:

# coding: pyxl
print <html><body>Hello World!</body></html>

# coding: interpy
package = "Interpy"
print "Enjoy #{package}!"

如果我愿意,我怎么能写自己的coding:?我可以使用多个吗?

1 个答案:

答案 0 :(得分:7)

我是Syrus,interpy的创造者。

感谢Python中的编解码器# coding: your_codec_name,我们有机会在将文件转换为字节码之前对其进行预处理。

这是它的工作原理:

读取文件内容

首先,Python读取文件并存储其内容。由于内容可能以奇怪的格式编码,因此Python会尝试解码。这是魔法发生的地方

如果未找到编码,Python将尝试使用默认字符串编码对内容进行解码:Ascii或UTF-8编解码器,具体取决于Python版本。这就是为什么在Python 2中使用异常字符(á,ñ,Ð,...)时必须编写# coding: utf-8,因为Ascii是默认值。

解码文件内容

如果我们register a custom codec(编码器和解码器),并且文件告诉Python它正在使用我们的编解码器(通过# coding: codec_name),那么Python将使用我们的编解码器解码文件。

注册我们的编解码器

要在不需要导入的情况下注册编解码器,我们会在执行任何非主模块之前创建一个path configuration file(。pth)registers编解码器。

转换文件内容

一旦我们codec is called的解码器,我们可以修改我们想要的输出,但是......我们如何知道这个内容中的Python语法(令牌)?

只需使用文件内容调用Python tokenizer并修改所需的标记。

如果是interpy,则仅在文件内容中Python strings are found时更改行为。

发送回转换(解码)的内容

一旦我们转换了内容,我们就会将其发送回Python编译器以编译为字节码。

希望你觉得这很有用!