Maison > Questions et réponses > le corps du texte
def is_unique_char(string):
if len(string) > 256:
return True
record = 0L
for ch in string:
# print record
ch_val = ord(ch)
if (record & (1 << ch_val)) > 0:
return False
record |= (1 << ch_val)
return True
import string
s1 = string.ascii_letters + string.digits
if __name__ == '__main__':
import timeit
print is_unique_char(s1)
print timeit.timeit("is_unique_char(s1)",
setup="from __main__ import is_unique_char, s1")
代码如上, is_unique_char 就是一个包含位运算的函数(具体作用不重要)
运行代码, 秒出print is_unique_char(s1)
的结果, 但是timeit测量需要30多秒。 这是为什么呢?会不会是因为位运算? 呃,先感谢大家解答
PHP中文网2017-04-18 09:06:07
Pour faire simple, timeit
exécutera le code 1000000
fois..., ce qui bien sûr prend beaucoup de temps.
Cette fonction est utilisée pour mesurer le temps d'exécution moyen d'un certain morceau de code, vous devez donc le diviser par le nombre de fois où il est exécuté.
J'ai modifié votre code et je l'ai testé en utilisant time.time
:
# uc.py
chaîne d'importation
def is_unique_char(chaîne) :
si len(chaîne) > 256 :
retourner vrai
enregistrement=0L
pour ch dans la chaîne :
# imprimer l'enregistrement
ch_val = ord(ch)
si (enregistrement & (1 << ch_val)) >
retourner Faux
enregistrement |= (1 << ch_val)
retourner vrai
s1 = string.ascii_letters + string.digits
importer le temps
heure d'importation
depuis uc import is_unique_char, s1
si __name__ == '__main__' :
btime = time.time()
est_unique_char(s1)
etime = time.time()
imprimer etime-btime
print timeit.timeit("is_unique_char(s1)", setup="from uc import is_unique_char, s1")/1000000
Résultat :
4.91142272949e-05
2.89517600536e-05
Le résultat est qu'une seule exécution est presque la même...
Questions auxquelles j'ai répondu : Python-QA
黄舟2017-04-18 09:06:07
https://docs.python.org/2/library/timeit.html
timeit.timeit(stmt='pass', setup='pass', timer=<minuterie par défaut>, number=1000000)
Créez une instance Timer avec l'instruction donnée, le code de configuration et la fonction timer et exécutez sa méthode timeit() avec nombre d'exécutions
nombre d'exécutions
默认number=1000000
默认要跑1000000次当然慢了...