pyxl或 interpy正在使用一个非常有趣的技巧以某种方式增强 python 语法:coding:
from PEP-263
# 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 语法(标记)?
只需调用 Python tokenizer使用文件内容并修改所需的标记。
在 interpy
的情况下,它仅在 Python strings are found 时更改行为在文件内容中。
发回转换(解码)的内容
转换内容后,我们将其发送回 Python 编译器以编译为字节码。
希望你觉得这很有用!
关于python - "coding: pyxl"在 Python 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992179/