Подтвердить что ты не робот

Что делает функция python re.template?

При использовании re-модуля в ipython я заметил недокументированную функцию template:

In [420]: re.template?
Type:           function
Base Class:     <type 'function'>
String Form:    <function template at 0xb7eb8e64>
Namespace:      Interactive
File:           /usr/tideway/lib/python2.7/re.py
Definition:     re.template(pattern, flags=0)
Docstring:
    Compile a template pattern, returning a pattern object

существует также флаг re.TEMPLATE и его псевдоним re.T.

Ничего из этого не упоминается в документах для 2.7 или 3.2. Что они делают? Являются ли они устаревшими похмелья от более ранней версии Python или экспериментальной функцией, которая может быть официально добавлена ​​в будущем?

4b9b3361

Ответ 1

В CPython 2.7.1 re.template() определяется как:

def template(pattern, flags=0):
    "Compile a template pattern, returning a pattern object"
    return _compile(pattern, flags|T)

_compile вызывает _compile_typed, который вызывает sre_compile.compile. Единственное место в коде, в котором отмечен флаг T (aka SRE_FLAG_TEMPLATE), это в этой функции:

    elif op in REPEATING_CODES:
        if flags & SRE_FLAG_TEMPLATE:
            raise error, "internal: unsupported template operator"
            emit(OPCODES[REPEAT])
            skip = _len(code); emit(0)
            emit(av[0])
            emit(av[1])
            _compile(code, av[2], flags)
            emit(OPCODES[SUCCESS])
            code[skip] = _len(code) - skip
    ...

Это приведет к отключению всех операторов повторения (*, +, ?, {} и т.д.):

In [10]: re.template('a?')
---------------------------------------------------------------------------
.....
error: internal: unsupported template operator

Способ структурирования кода (безусловный raise, предшествующий кучке мертвого кода) заставляет меня думать, что эта функция либо не была полностью реализована, либо была отключена из-за некоторых проблем. Я могу только догадываться, какова предполагаемая семантика.

Конечным результатом является то, что функция ничего не делает.

Ответ 2

Я не знаю, что делает эта функция, но она была в коде, по крайней мере, еще в 2.3, в файле sre.py, и код все еще имеет этот комментарий:

# sre extensions (experimental, don't rely on these)
T = TEMPLATE = sre_compile.SRE_FLAG_TEMPLATE # disable backtracking

Я бы держался подальше от них.