Về mặt lý thuyết, hammar's answer và duffymo's answer là các dự đoán tốt. Nhưng trong thực tế, trên máy tính của tôi, đó là không hiệu quả hơn:
>>> import timeit
>>> timeit.timeit(stmt='[n ** 0.5 for n in range(100)]', setup='import math', number=10000)
0.15518403053283691
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(100)]', setup='import math', number=10000)
0.17707490921020508
Một phần của vấn đề là các hoạt động .
. Nếu bạn nhập sqrt
trực tiếp vào không gian tên, bạn sẽ nhận được một chút cải thiện.
>>> timeit.timeit(stmt='[sqrt(n) for n in range(100)]', setup='from math import sqrt', number=10000)
0.15312695503234863
Từ khóa có: nhẹ.
Kiểm tra thêm cho thấy rằng khi số càng lớn, lợi ích bạn nhận được từ việc sử dụng số tăng sqrt
tăng. Nhưng vẫn không nhiều!
>>> timeit.timeit(stmt='[n ** 0.5 for n in range(1000000)]', setup='import math', number=1)
0.18888211250305176
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(1000000)]', setup='import math', number=1)
0.18425297737121582
>>> timeit.timeit(stmt='[sqrt(n) for n in range(1000000)]', setup='from math import sqrt', number=1)
0.1571958065032959
Bạn luôn có thể tự đo nó bằng 'thời gian'. Đối với bản ghi, 'math.sqrt' chỉ nhanh hơn tôi 5%. – delnan