关于修饰的应用
大佬们,我将小甲鱼的相关@修饰代码按照自己的理解改了一下,可是不知道哪里除了出了问题,大佬们帮忙看一下import time
import time
def call(func):
start = time.clock()
print("It's time starting ! ")
func()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
@call
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
print(f()) import time
def timeit(function):
def wrapper():
start = time.clock()
print("It's time starting!")
function()
print("It's time ending!")
end = time.clock()
print(f'函数执行所花费的时间为:{end-start}')
return wrapper
@timeit
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
f()
修改成这样,修饰器必须要返回一个可callable对象,不然就会报错,楼上有报错原因。 return "It's used : %s ." % (end - start) 返回被接受后运行,所以报错
就是
a = "It's used : %s ." % (end - start)
a()引发的异常 怎么有两个% @call
def f():
等价于 f = call(f)
运行时call(f)返回的是“It's used:时间”,是一个字符串,也就是说f这个指向了一个字符串,
下面的f()是调用函数,而字符串不能调用,所以报错。
@call 之后 f 就变成了 "It's used : %s ." % (end - start){:10_248:}
修饰器应该这么写:def call(func):
def wrapper():
start = time.clock()
print("It's time starting ! ")
func()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
wrapper.__name__=func.__name__
return wrapper
ps:都2020年了,用str.format和f-string来格式化字符串吧 iltifa 发表于 2020-3-17 21:46
修改成这样,修饰器必须要返回一个可callable对象,不然就会报错,楼上有报错原因。
谢谢大佬,我也是一直没有深入了解修饰语句的使用。原来在修饰之后,会默认的加上()来实现调用,所以,在那个里面必须再套一个函数啊。
页:
[1]