我在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:语法无效
答案 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")