cari

Rumah  >  Soal Jawab  >  teks badan

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 hari yang lalu367

membalas semua(2)saya akan balas

  • PHP中文网

    PHP中文网2017-04-18 09:06:07

    Ringkasnya, timeit akan melaksanakan kod 1000000 kali..., yang sudah tentu mengambil masa yang lama.

    Fungsi ini digunakan untuk mengukur purata masa berjalan bagi sekeping kod tertentu, jadi anda mesti membahagikannya dengan bilangan kali ia dilaksanakan.

    Saya menukar kod anda dan mengujinya menggunakan time.time:

    # uc.py
    
    rentetan import
    
    def is_unique_char(rentetan):
        jika len(rentetan) >
            kembali Benar
    
        rekod=0L
    
        untuk ch dalam rentetan:
            # cetak rekod
            ch_val = ord(ch)
    
            jika (rekod & (1 << ch_val)) >
                kembali Salah
    
            rekod |= (1 << ch_val)
    
        kembali Benar
    
    s1 = string.ascii_letters + string.digit
    import timeit
    masa import
    daripada uc import is_unique_char, s1
    
    jika __nama__ == '__utama__':
        btime = masa.masa()
        is_unique_char(s1)
        etime = masa.masa()
        cetak etime-btime
        print timeit.timeit("is_unique_char(s1)", setup="from uc import is_unique_char, s1")/1000000

    Hasil:

    4.91142272949e-05
    2.89517600536e-05

    Hasilnya ialah satu larian adalah hampir sama...


    Soalan yang saya jawab: Python-QA

    balas
    0
  • 黄舟

    黄舟2017-04-18 09:06:07

    https://docs.python.org/2/library/timeit.html

    timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000)
    

    Buat contoh Pemasa dengan pernyataan yang diberikan, kod persediaan dan fungsi pemasa dan jalankan kaedah timeit()nya dengan nombor pelaksanaan

    bilangan pelaksanaan
    默认nombor=1000000
    默认要跑1000000次当然慢了...

    balas
    0
  • Batalbalas