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. Timermong đợ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). Timerhoạ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ì superMegaIntenseFunctioncó thể gọi được. Tuy nhiên, Timersẽ 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 globalsnhư 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ố 10vớ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 superMegaIntenseFunctionvớ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).