Frage

Ich bin in Python eine harte Zeit mit der Setup-Anweisung mit timeit.Timer (stmt, setup_stmt). Ich schätze jede Hilfe mich dieses heikelen Problems heraus zu bekommen:

Also meine Sniplet wie folgt aussehen:

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

Ich weiß nicht, wie die metacharacter in den Variablen str1 zu entkommen, STR2, ohne ihre Bedeutung in der Setup-Anweisung zu ändern:

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

Ich habe versucht, verschiedene Kombinationen, aber immer haben die folgenden Fehler: Syntaxerror: kann nicht auf wörtliche
zuweisen Syntaxerror: EOL beim Scannen Strings in einfachen Anführungszeichen
Syntaxerror: invalid syntax

War es hilfreich?

Lösung

Betrachten Sie diese als Alternative.

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

Die %r verwendet die repr für die Zeichenfolge, die Python immer zitiert und entkommt richtig.

EDIT: Fest Code durch ein Komma zu einem Semikolon zu ändern; der Fehler ist jetzt weg.

Andere Tipps

Warum sich die Mühe die Saiten überhaupt zu zitieren? Verwenden Sie sie einfach direkt. dh. ändern Ihre letzte Zeile:

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top