recherche

Maison  >  Questions et réponses  >  le corps du texte

python timeit测量代码运行时间, 好像不对

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多秒。 这是为什么呢?会不会是因为位运算? 呃,先感谢大家解答

PHPzPHPz2893 Il y a quelques jours370

répondre à tous(2)je répondrai

  • PHP中文网

    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

    répondre
    0
  • 黄舟

    黄舟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次当然慢了...

    répondre
    0
  • Annulerrépondre