装饰器

1)没有返回值的装饰器

import time

def decorator_fun(fun_dec):
def wrapepr():
t1 = time.time()
fun_dec()
t2 = time.time()
print(t1-t2)
return wrapepr

def is_prime(num):
if num<2:
return False
elif num == 2:
return True
else:
for i in range(2,num):
if num%i==0:
return False
return True

@decorator_fun
def prime_nums():
"""
引用装饰器,等同于 prime_nums = decorator_fun(prime_nums)
:return:
"""
for i in range(2,10000):
if is_prime(i):
print(i)

prime_nums()
2)有返回值的装饰器
import time

def decorator_fun(fun_dec):
def wrapepr():
t1 = time.time()
count = fun_dec()
t2 = time.time()
print("Total time:{:.4}s".format(t1-t2))
return count
return wrapepr

def is_prime(num):
if num<2:
return False
elif num == 2:
return True
else:
for i in range(2,num):
if num%i==0:
return False
return True

@decorator_fun
def count_prime_nums():
"""
引用装饰器,等同于 prime_nums = decorator_fun(prime_nums)
:return:
"""
count = 0
for i in range(2,10000):
if is_prime(i):
count+=1
return count

count = count_prime_nums()
print(count)
3)有参数的装饰器
import time

def decorator_fun(fun_dec):
# 运行fun_dec的时候需要运行那些内容
# def wrapepr(max_num):
def wrapepr(*args):
t1 = time.time()
# count = fun_dec(max_num)
count = fun_dec(*args)
t2 = time.time()
print("Total time:{:.4}s".format(t1-t2))
return count
return wrapepr

def is_prime(num):
if num<2:
return False
elif num == 2:
return True
else:
for i in range(2,num):
if num%i==0:
return False
return True

@decorator_fun
def count_prime_nums(max_num):
"""
引用装饰器,等同于 prime_nums = decorator_fun(prime_nums)
:return:
"""
count = 0
for i in range(2,max_num):
if is_prime(i):
count+=1
return count

count = count_prime_nums(1000)
print(count)
posted @ 2020-10-28 00:07  caowenyue1996  阅读(56)  评论(0)    收藏  举报