Quelqu'un peut-il m'expliquer pourquoi cela se passe?Python timeit ne fonctionne pas?
[email protected] ~ $ time python /usr/lib64/python2.7/timeit.py -n 1 \
-- 'x = 10**1000'
1 loops, best of 3: 0.954 usec per loop
real 0m0.055s
user 0m0.050s
sys 0m0.000s
[email protected] ~ $ time python /usr/lib64/python2.7/timeit.py -n 1 \
-- 'x = 10**100000'
1 loops, best of 3: 0.954 usec per loop
real 0m0.067s
user 0m0.040s
sys 0m0.020s
[email protected] ~ $ time python /usr/lib64/python2.7/timeit.py -n 1 \
-- 'x = 10**10000000'
1 loops, best of 3: 0.954 usec per loop
real 0m20.802s
user 0m20.540s
sys 0m0.170s
-je obtenir exactement le même résultat de timeit
, mais time
me dit que l'évaluation 10**10000000
prend plus de 20 secondes. La même chose arrive si je l'appelle timeit
de l'interprète:
>>> t = time.time()
>>> print timeit.timeit('x = 10**10000000;', number=1)
5.00679016113e-06
>>> print time.time() - t
20.6168580055
Pourquoi mon timeit
ne fonctionne pas, ou ce que je fais mal?
Informations complémentaires:
>>> print sys.version
2.7.1+ (2.7:4f07cacb2c3b+, Mar 28 2011, 23:11:59)
[GCC 4.4.5]
>>> print sys.version_info
>>> sys.version_info(major=2, minor=7, micro=2, releaselevel='alpha', serial=0)
MISE À JOUR:
Voici une autre observation très intéressante:
>>> def run():
... t = time.time()
... x = 10**10000000
... print time.time() - t
Quand j'appuyez sur Entrée après la définition de cette fonction, il faut environ une demi-minute jusqu'à ce que je revienne à une invite. Et puis:
>>> run()
2.14576721191e-06
Pourquoi cela se produit-il? Le corps de la fonction est-il pré-compilé ou optimisé d'une manière ou d'une autre?
Vous avez raison, en forçant le calcul à se produire chaque fois que cela prend plus de temps. Je ne savais pas que Python va pré-calculer les expressions pour moi. –
@Attila - moi non plus jusqu'à présent. –