Timer(superMegaIntenseFunction(10))
có nghĩa là "gọi superMegaIntenseFunction(10)
, sau đó chuyển kết quả cho Timer
". Đó rõ ràng không phải là những gì bạn muốn. Timer
mong đợi một có thể gọi (giống như âm thanh của nó: một cái gì đó có thể được gọi, chẳng hạn như một hàm) hoặc một chuỗi (để nó có thể diễn giải nội dung của chuỗi dưới dạng mã Python). Timer
hoạt động bằng cách gọi liên tục điều có thể gọi và xem lượng thời gian được sử dụng.
Timer(superMegaIntenseFunction)
sẽ vượt qua kiểm tra loại, vì superMegaIntenseFunction
có thể gọi được. Tuy nhiên, Timer
sẽ không biết những giá trị nào để chuyển sang superMegaIntenseFunction
.
Tất nhiên, cách đơn giản để giải quyết vấn đề này là sử dụng một chuỗi với mã. Chúng ta cần chuyển đối số 'thiết lập' cho mã, bởi vì chuỗi được "hiểu là mã" trong ngữ cảnh mới - nó không có quyền truy cập giống globals
như vậy, vì vậy bạn cần chạy một đoạn mã khác để tạo định nghĩa có sẵn - xem câu trả lời của @ oxtopus.
Với lambda
(như trong câu trả lời của @ Pablo), chúng ta có thể liên kết tham số 10
với một lệnh gọi tới superMegaIntenseFunction
. Tất cả những gì chúng tôi đang làm là tạo ra một chức năng, mà không có đối số, và các cuộc gọi superMegaIntenseFunction
với 10
. Nó giống như thể bạn đã sử dụng def
để tạo một hàm khác như vậy, ngoại trừ việc hàm mới không có tên (vì nó không cần tên).