Tôi thích việc có thể để đo hiệu suất của các chức năng python tôi mã, do đó rất lâu tôi làm điều gì đó tương tự như sau ...Chức năng trang trí
import time
def some_function(arg1, arg2, ..., argN, verbose = True) :
t = time.clock() # works best in Windows
# t = time.time() # apparently works better in Linux
# Function code goes here
t = time.clock() - t
if verbose :
print "some_function executed in",t,"sec."
return return_val
Vâng, tôi biết bạn có nghĩa vụ phải đo lường hiệu suất với timeit , nhưng điều này hoạt động tốt cho nhu cầu của tôi và cho phép tôi bật và tắt thông tin này để gỡ lỗi rất suôn sẻ.
Mã đó là từ trước khi tôi biết về trang trí chức năng ... Tôi không biết nhiều về chúng bây giờ, nhưng tôi nghĩ tôi có thể viết một trang trí làm như sau, sử dụng từ điển ** kwds:
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, verbose = True) # Times function
tôi vẫn muốn lặp lại trong các hoạt động trước khi các chức năng của tôi, do đó làm việc sẽ là một cái gì đó giống như:
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, False) # Does not time function
some_function(arg1, arg2, ..., argN, True) # Times function
tôi đoán điều này sẽ đòi hỏi sự trang trí để đếm số lượng các đối số, biết bao nhiêu chức năng ban đầu sẽ mất, p bất kỳ vượt quá, vượt qua số lượng phải của họ để chức năng ... Tôi không chắc chắn mặc dù về cách nói với python để làm điều này ... Có thể? Có cách nào tốt hơn để đạt được điều tương tự không?
nhưng những gì "some_function (arg1, arg2, ..., argN, True)" cũng phải chạy? –
Vâng, điều đó đòi hỏi một loại trang trí khác. Một trong đó sử dụng kiểm tra hoặc có giá trị số bổ sung cho biết số lượng đối số cố định mà hàm được trang trí thực hiện. – Stephan202
Cảm ơn bạn đã viết cho tôi Stephan! Tôi đã nghĩ về điều này trên đường về nhà từ công việc, và tôi đã đi đến kết luận rằng việc sử dụng các đối số từ khóa cho điều này là một cách tiếp cận tốt hơn, vì nó sẽ cho phép tôi bao gồm các tham số khác, chẳng hạn như bao nhiêu lần để thời gian hàm và liệu bản in có phản ánh thời gian trung bình, thời gian tối thiểu hoặc số liệu thống kê chi tiết hơn ... – Jaime