将参数传递给timeit.Timer()函数时棘手的Python字符串文字

时间:2008-12-22 16:25:42

标签: python string-literals timeit

我在Python的timeit.Timer(stmt,setup_stmt)中使用setup语句很难。我很感激帮助我摆脱这个棘手的问题:

所以我的sniplet看起来像这样:

def compare(string1, string2):
    # compare 2 strings

if __name__ = '__main__':
    str1 = "This string has \n several new lines \n in the middle"
    str2 = "This string hasn't any new line, but a single quote ('), in the middle"

    t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%s, p2=%s" % (str1,str2))

我不知道如何在变量str1,str2中转义元字符而不改变它们在setup语句中的含义:

"from __main__ import compare; p1=%s, p2=%s" % (str1,str2)

我尝试了各种组合,但总是有以下错误: SyntaxError:无法分配给文字
SyntaxError:扫描单引号字符串时的EOL SyntaxError:语法无效

2 个答案:

答案 0 :(得分:6)

将此作为替代方案。

t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%r; p2=%r" % (str1,str2))

%r使用repr作为字符串,Python总是引用并正确转义。

编辑:通过将逗号更改为分号来修复代码;错误现在消失了。

答案 1 :(得分:2)

为什么要麻烦引用字符串呢?直接使用它们。 即。将您的最后一行更改为:

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")