Я работаю с довольно простым парсером в PLY , и одно из моих правил принимает следующую форму:
def p_things(p):
'''
things : thing things
things : thing
'''
p[0] = [p[1]]
if len(p) == 3:
p[0] += p[2]
Входные файлы, как правило, представляют собой простые списки объектов
s, поэтому сам анализ не является сложным. Однако некоторые из моих входных файлов очень большие (регулярно превышают 100 000 строк и более 1 000 000 в крайних случаях). При профилировании (через cProfile и pstats ) большая часть времени выполнения занята повторными вызовами p_things
- предположительно, один вызов для каждого элемента в things
] list.
Есть ли способ сократить это время или более эффективный способ структурировать это правило? В большинстве ответов, которые я видел до сих пор (и в информации о канонических компиляторах, которую я нашел), этот метод указан как общепринятый способ создания списка анализируемых элементов независимо от длины.