pyxl或interpy使用一种非常有趣的技巧来以某种方式增强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/