Pergunta

Eu estou tendo um momento difícil com a afirmação de configuração em Python timeit.Timer (stmt, setup_stmt). Agradeço qualquer ajuda para me tirar deste problema complicado:

Assim, meus sniplet esta aparência:

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

Eu não sei como escapar da metacharacter na str1 variável, str2, sem alterar o seu significado na demonstração de configuração:

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

Eu tentei várias combinações, mas sempre tem os seguintes erros: SyntaxError: não é possível atribuir a literal
SyntaxError: EOL durante a digitalização de corda
único citado SyntaxError: inválido sintaxe

Foi útil?

Solução

Pense nisto como uma alternativa.

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

O %r usa o repr para a cadeia, que Python sempre citações e escapa corretamente.

EDIT: código fixo, mudando uma vírgula para um ponto e vírgula; o erro é ido agora.

Outras dicas

Por que se preocupar citando as cordas em tudo? Apenas usá-los diretamente. ie. mudar a sua última linha para:

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top