计算一下输出从2到10000中的质数所需要的的时间,代码如下:
import time
def is_prime(num):
if num < 2:
return False
if num == 2:
return True
if num > 2:
for i in range(2, num):
if num % i == 0:
return False
return True
def prime_nums():
t1 = time.time()
for i in range(2, 10000):
if is_prime(i):
print(i)
t2 = time.time()
print(t2 - t1)
prime_nums()
在primer_nums()函数中,既包含了计时部分,又包含了逻辑部分,显得非常混乱,如果有很多primer_nums()这种函数,每次都需要写计时部分,显得非常麻烦,为了解决这个问题,把逻辑和计时分开,需要用到装饰器。
如下:
import time
def display_time(func):
def wrapper():
t1 = time.time()
func()
t2 = time.time()
print(t2 - t1)
return wrapper
def is_prime(num):
if num < 2:
return False
if num == 2:
return True
if num > 2:
for i in range(2, num):
if num % i == 0:
return False
return True
@display_time
def prime_nums():
for i in range(2, 10000):
if is_prime(i):
print(i)
prime_nums()
在运行prime_nums()函数时,会自动去运行装饰器。
另外一个问题,如果prime_nums()函数有返回值时需要怎么操作,比如统计1到10000之间有多少个质数:
import time
def display_time(func):
def wrapper():
t1 = time.time()
result = func()
t2 = time.time()
print("Total time: {:.4}".format(t2 - t1))
return result
return wrapper
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
@display_time
def count_prime_nums():
count = 0
for i in range(1, 10000):
if is_prime(i):
count = count + 1
return count
count = count_prime_nums()
print(count)
现在需要对count_prime_nums()函数添加参数:
import time
def display_time(func):
def wrapper(*args): # *args 表示不确定参数个数
t1 = time.time()
result = func(*args) # func()代表count_prime_nums()
t2 = time.time()
print("Total time: {:.4}s".format(t2 - t1))
return result
return wrapper
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
@display_time
def count_prime_nums(num):
count = 0
for i in range(1, num):
if is_prime(i):
count = count + 1
return count
count = count_prime_nums(10000)
print(count)
视频连接:https://www.bilibili.com/video/BV11s411V7Dt?from=search&seid=9261307970198944936