如何在Python中优化短字符串lexing

时间:2016-07-28 20:55:08

标签: python optimization cpython

我正在尝试在纯CPython fast lex (即,标记化)转义字符串(不依赖于C代码)。< / p>

我能想到的最好成绩如下:

def bench(s, c, i, n):
    m = 0
    iteration = 0
    while iteration < n:
        # How do I optimize this part?
        # Inputs: string s, index i
        k = i
        while True:
            j = s.index(c, k, n)
            sub = s[k:j]
            if '\\' not in sub: break
            k += sub.index('\\') + 2
        # Outputs: substring s[i:j], index j

        m += j - i
        iteration += 1
    return m

def test():
    from time import clock
    start = clock()
    s = 'sd;fa;sldkfjas;kdfj;askjdf;askjd;fasdjkfa, "abcdefg", asdfasdfas;dfasdl;fjas;dfjk'
    m = bench(s, '"', s.index('"') + 1, 3000000)
    print "%.0f chars/usec" % (m / (clock() - start)  / 1000000,)

test()

但是,我的口味仍然有点慢。似乎.index的调用在我的实际项目中花了很多时间,尽管在这个基准测试中它似乎并不经常发生。

它所需的大多数字符串可以假设为相对较短(例如,7个字符),并且不太可能包含反斜杠。我已经为此做了一些优化。我的问题是:
我是否可以对加速此代码进行任何优化?如果是这样,什么?

0 个答案:

没有答案