2012-06-04 39 views
11

Có cách nào để sử dụng chức năng timeit để xuất cả kết quả hàm và thời gian cần để xử lý cùng một lúc không?Đầu ra của chương trình và thời gian Python

Ngay bây giờ tôi đang sử dụng

timer = Timer('func()', 'from __main__ import func') 
print timer.timeit(1) 

Nhưng điều này chỉ là kết quả đầu ra thời gian và không phải là đầu ra chương trình, trong đó trả về một cái gì đó ở cuối của nó. Tôi muốn nó xuất ra

FuncOutputGoesHere 13.2897528935 

trên cùng một dòng.

Lý tưởng nhất, tôi muốn để có thể mất trung bình của chương trình bằng cách chạy nó N lần và sau đó xuất ra kết quả chương trình và thời gian trung bình của nó (tổng cộng một lượng tổng thể)

+0

Tôi dường như thấy rất nhiều độ lệch giữa những người đề xuất thời gian chờ và mọi người đề xuất time.time(). Cái nào tốt hơn? – MyNameIsKhan

+0

'timeit' sử dụng' time.time() ', trừ khi bạn đang ở trên các cửa sổ, nơi nó sẽ sử dụng' time.clock' (chính xác hơn). –

+0

Vì vậy, timeit sẽ cung cấp cho tôi với độ chính xác nhất? – MyNameIsKhan

Trả lời

13

Hai lựa chọn:

  1. Bao gồm 'in' trong mã thời gian của bạn. Xấu xí, nhưng hey.

    timer = Timer('print func()', 'from __main__ import func') 
    print timer.timeit(1) 
    
  2. Nếu tất cả các bạn làm được điều hành chức năng của mình một lần, sau đó phân chia với các timeit mô-đun hoàn toàn và thời gian mã trực tiếp bằng cách sử dụng phương pháp tương tự:

    import sys 
    import time 
    
    if sys.platform == "win32": 
        # On Windows, the best timer is time.clock() 
        default_timer = time.clock 
    else: 
        # On most other platforms the best timer is time.time() 
        default_timer = time.time 
    
    t0 = default_timer() 
    output = func() 
    t1 = default_timer() 
    print output, t1 - t0 
    

Nếu bạn muốn chạy mã nhiều lần và tạo đầu ra, tại sao không chạy mã một lần bên ngoài chức năng timeit? Bạn đang gọi nó nhiều hơn một lần rồi sau đó:

timer = Timer('func()', 'from __main__ import func') 
    print timer.timeit(100), 
    print func() 
+0

cảm ơn, điều này rất hữu ích –

0

Mô-đun timeit thực thi câu lệnh được chuyển. Bạn chỉ có thể in kết quả của hàm:

timer = Timer('print func()', 'from __main__ import func') 
print timer.timeit(1) 
+1

Điều này sẽ in nó một triệu lần, hoặc tuy nhiên thường là tuyên bố được thực thi, và cũng tính phí I/O trên timings. – delnan

+0

@delnan: anh ấy chạy timer.timeit (1) ... Làm cho điều bạn muốn. :-P –

+0

@MartijnPieters Tôi không biết chạy nhiều lần như thế nào mà không cần xuất nhiều lần; tôi cũng nghĩ rằng tôi cần phải chia kết quả cho số lượng thời gian rảnh vì nó có vẻ là tổng hợp. Nó sẽ là lý tưởng để chạy nó một vài lần để có được trung bình và đầu ra một lần. – MyNameIsKhan

Các vấn đề liên quan