|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import time
def time_master(func):
print('Starting...')
start = time.time()
func()
stop = time.time()
print('Finish')
print(f'Spend {(stop - start):.2f} second.')
def myfunc(y):
time.sleep(0.5)
x = 1
for i in range(1,y):
x *= i
print(x)
time_master(myfunc(10)) #外层函数计算内层函数所用时间 内层函数计算阶乘 参数为y 这样搞不行吗?
这样是不行的,因为你现在是直接调用了 myfunc(10) ,而不是将它作为一个参数传递给 time_master 函数。 myfunc(10) 的返回值是 None ,所以你实际上是在调用 time_master(None) 。
正确的做法是将函数名 myfunc (不带括号和参数)作为参数传递给 time_master 函数,同时传递需要的参数。你可以将 myfunc 的参数包装在一个函数中,然后将这个包装函数作为参数传递给 time_master 函数,如下所示:
- import time
- def time_master(func):
- print('Starting...')
- start = time.time()
- func()
- stop = time.time()
- print('Finish')
- print(f'Spend {(stop - start):.2f} second.')
- def myfunc(y):
- time.sleep(0.5)
- x = 1
- for i in range(1,y):
- x *= i
- print(x)
- def wrapper():
- myfunc(10)
- time_master(wrapper) #这样就可以了
复制代码
或者,你也可以修改 time_master 函数,让它接受函数及其参数作为参数,如下所示:
- import time
- def time_master(func, *args, **kwargs):
- print('Starting...')
- start = time.time()
- func(*args, **kwargs)
- stop = time.time()
- print('Finish')
- print(f'Spend {(stop - start):.2f} second.')
- def myfunc(y):
- time.sleep(0.5)
- x = 1
- for i in range(1,y):
- x *= i
- print(x)
- time_master(myfunc, 10) #这样也可以
复制代码
|
-
|