Je me demande pourquoi repr(int)
plus rapide que de l' str(int)
. Avec l'extrait de code suivant:
ROUNDS = 10000
def concat_strings_str():
return ''.join(map(str, range(ROUNDS)))
def concat_strings_repr():
return ''.join(map(repr, range(ROUNDS)))
%timeit concat_strings_str()
%timeit concat_strings_repr()
Je reçois ces timings (python 3.5.2, mais des résultats très similaires avec 2.7.12):
1.9 ms ± 17.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1.38 ms ± 9.07 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Si je suis sur la bonne voie, la même fonction long_to_decimal_string
est appelé ci-dessous le capot.
Ai-je quelque chose de mal ou quoi d'autre qui se passe que je suis absent?
mise à jour:
C'est probablement ce qui n'a rien à avec int
s' __repr__
ou __str__
méthodes mais avec les différences entre repr()
et str()
, comme int.__str__
et int.__repr__
sont en fait comparable rapide:
def concat_strings_str():
return ''.join([one.__str__() for one in range(ROUNDS)])
def concat_strings_repr():
return ''.join([one.__repr__() for one in range(ROUNDS)])
%timeit concat_strings_str()
%timeit concat_strings_repr()
résultats:
2.02 ms ± 24.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.05 ms ± 7.07 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)