Difficili stringhe Python nel passare parametro timeit.Timer () funzione
-
23-08-2019 - |
Domanda
Sto avendo un momento difficile con la dichiarazione di installazione di Python in timeit.Timer (stmt, setup_stmt). Apprezzo tutto l'aiuto di farmi uscire da questo problema difficile:
Quindi il mio sniplet assomiglia a questo:
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))
Non so come sfuggire il metacarattere in str1 variabili, str2 senza modificarne la sostanza nella dichiarazione di impostazione:
"from __main__ import compare; p1=%s, p2=%s" % (str1,str2)
Ho provato varie combinazioni, ma hanno sempre i seguenti errori:
SyntaxError: non può assegnare al
letterale
SyntaxError: EOL durante la scansione stringa tra apici singoli
SyntaxError: invalid syntax
Soluzione
considerare questo come alternativa.
t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%r; p2=%r" % (str1,str2))
Il %r
utilizza il repr per la stringa, che cita sempre Python e fugge in modo corretto.
EDIT: Codice fisso cambiando una virgola per un punto e virgola; l'errore è ormai andato.
Altri suggerimenti
Perché preoccuparsi citando le corde a tutti? Basta usarli direttamente. vale a dire. cambiare la vostra ultima riga a:
t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")