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

È stato utile?

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")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top