6

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

所以我的片段看起来像这样:

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))

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

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

我尝试了各种组合,但总是出现以下错误: SyntaxError: can't assign to literal
SyntaxError: EOL while sweeping single-quoted string
SyntaxError: invalid syntax

4

2 回答 2

7

考虑将此作为替代方案。

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

使用%rrepr 作为字符串,Python 总是正确地引用和转义。

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

于 2008-12-22T16:47:19.537 回答
2

为什么要费心引用字符串呢?只需直接使用它们。IE。将最后一行更改为:

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")
于 2008-12-23T01:14:42.510 回答