python timeit测量代码运行时间, 好像不对
PHPz
PHPz 2017-04-18 09:04:07
0
2
365
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多秒。 这是为什么呢?会不会是因为位运算? 呃,先感谢大家解答

PHPz
PHPz

学习是最好的投资!

membalas semua(2)
Ty80

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

黄舟

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan