Pregunta

Estoy teniendo un tiempo duro con la frase de preparación en Python timeit.Timer (stmt, setup_stmt). Agradezco cualquier ayuda que me saque de este problema complicado:

Así que mi sniplet se ve así:

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

No sé cómo escapar de la metacarácter en el str1 variables, str2 sin cambiar su significado en la frase de preparación:

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

He intentado varias combinaciones, pero siempre tienen los siguientes errores: SyntaxError: no se puede asignar a literal
SyntaxError: EOL durante la exploración entre comillas simples cadena
SyntaxError: no válido

¿Fue útil?

Solución

Considere esto como una alternativa.

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

El %r utiliza la repr para la cadena, que cita a Python siempre y escapa correctamente.

EDIT: Código fijo cambiando una coma a un punto y coma; el error se ha ido.

Otros consejos

¿Por qué molestarse citando las cuerdas en absoluto? Sólo tiene que utilizar directamente. es decir. cambiar la última línea a:

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top