pyxl或interpy正在使用一种非常有趣的技巧以某种方式增强python语法:来自PEP-263的coding:
# coding: pyxl
print <html><body>Hello World!</body></html>
或
# coding: interpy
package = "Interpy"
print "Enjoy #{package}!"
如果我愿意,我怎么能写自己的coding:
?我可以使用多个吗?
答案 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编译器以编译为字节码。
希望你觉得这很有用!