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

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

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

如果我想怎么写自己的coding:?我可以使用多个吗?

最佳答案

我是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语法( token )?

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

对于interpy,仅当文件内容中的Python strings are found时,它才会更改行为。

发回经过转换(解码)的内容

转换内容后,我们将其发送回Python编译器以编译为字节码。

希望你觉得这个有用!

关于python - "coding: pyxl"在Python中如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20992179/

10-14 14:21
查看更多