Эти префиксы жестко закодированы в интерпретаторе, вы не можете зарегистрировать больше префиксов.
Что вы могли сделать однако, предобработки файлов Python, с помощью пользовательского источника кодека. Это довольно аккуратный взлом, который требует регистрации пользовательского кодека, а также для понимания и применения преобразований исходного кода.
Python позволяет указать кодировку исходного кода специальным комментарием: в верхней части
# coding: utf-8
бы сказать Python, что исходный код кодированного с UTF-8, и будет декодировать файл соответственно перед разбором , Python ищет кодек для этого в реестре модулей codecs
. И вы можете зарегистрировать свои собственные кодеки.
pyxl project использует этот трюк, чтобы проанализировать синтаксис HTML из файлов Python, чтобы заменить их на реальный синтаксис Python для создания этого HTML-кода на этапе «декодирования». См. codec
package в этом проекте, где register
module регистрирует custom codec
search function, который преобразует исходный код, прежде чем Python фактически анализирует и компилирует его. A custom .pth
file установлен в ваш каталог site-packages
, чтобы загрузить этот шаг регистрации во время запуска Python. Другой проект, который делает то же самое, чтобы проанализировать форматирование строки в стиле Ruby, - interpy
.
Все, что вам нужно сделать тогда, построить такой кодек также, что будет анализировать исходный файл Python (размечает это, возможно, с tokenize
module) и заменяет строки литералов пользовательского префикса с mystr(<string literal>)
вызовов. Любой файл, который вы хотите проанализировать, вы отмечаете с помощью # coding: yourcustomcodec
.
Я оставлю эту часть в качестве упражнения для читателя. Удачи!
Обратите внимание, что результат этого преобразования затем скомпилируется в байт-код, который кэшируется; ваша трансформация должна только запустить один раз на версию исходного кода, все остальные импорт модуля с использованием вашего кодека загрузит кешированный байт-код.
К сожалению, нет, не изменяя интерпретатор и не компилируя свои собственные.Интересно, что это то, что [ECMAScript может сделать в будущем] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals). –