计算一段代码的执行时间

import time #time模块可以获取当前的时间
思路如下:

#代码运行之前获取一下时间
start = time.time() #time模块里的time方法,可以获取当前时间的时间戳,时间戳是从1970-01-01 00:00:00 UTC 到现在的秒数
print('start=',start)
x=0
for i in range(1,10000000)
	x+=i
print(x)
end=time.time()
print('代码运行耗时时间:',end-start)
优化计算时间
import time
start = time.time()
print('start=',start)
x=0
for i in range(1,10000000)
	x+=i
print(x)
end=time.time()
print('代码运行耗时时间:',end-start)

y=1
for j in range(1,1000000)
	y*=y
print(y)


print('hello')
time.sleep(3)
print(' world')



def cal_time(fn):
	start=time.time()
	fn()
	end=time.time()
	print('代码运行耗时时间:',end-start)
	
def dome():
	x=0
	for i in range(1,10000000)
		x+=i
	print(x)
cal_time(dome)

def foo():
	y=1
	for j in range(1,1000000)
		y*=y
	print(y)
cal_time(foo)
装饰器的使用
import time
def cal_time(fn):
	def inner():
		start =time.time()
		fn()
		end=time.time()
		print('代码运行耗时时间:',end-start)
	return inner

@cal_time
def dome():
	x=0
	for i in range(1,10000000):
		x+=i
	print(x)
cal_time(dome)

@cal_time#第一件事调用cal_time;第二件事把被装饰的函数传递给fn
def foo():
	y=1
	for j in range(1,1000000):
		y*=y
	print(y)
	print('hello')
	time.sleep(3)
	print('world')
#第三件事:当再次调用demo函数是,此时的demo函数已经不再是上面的demo函数了	
print('装饰后的demo={}'.format(demo))
demo()
foo()
装饰器详解
def cal_time(fn):
	print('我是外部函数,我被调用了')
	def inner():
		start =time.time()
		fn()
		end=time.time()
		print('代码运行耗时间:',end-start)
	return inner

@cal_time
def foo():
	y=1
	for j in range(1,1000):
		y*=y
	print(y)
	print('hello')
	time.sleep(3)
	print('world')
	return y

foo()
m=foo()
print('m的值是:',m)#结果是None
#为什么拿不到y 的值?怎么样才能拿到?
#原因是foo函数已经不是foo了,变成了inner函数,仅需在inner函数里修改即可
	def inner():
		start =time.time()
		s=fn()
		end=time.time()
		print('代码运行耗时间:',end-start)
		return s
	return inner

下面我们希望
n=int(input("输入n的值:"))
def foo(n):#我们自己为foo函数传参,于是我们需要修改inner(里面的参数,变成inner(x),当然fn()函数也需要修改,因为fn函数现在才是原来的foo函数了,fn(x)这里的x是实参了,不能使用其他变量了

当我们需要取消print('代码运行耗时间:',end-start)这行代码时可以return s,end-start,这时m的值就是一个元组,包含了求和的结果和运行时间

修改 def inner(n,*args,**kwargs),这时候可以修改m=demo(1000000,'good',y='hello')
装饰器的使用(2)
def can_play(fn):
	def inner(x,y,*args,**kwargs):
		if args[0]<=22:
			fn(x,y)
		else:
			print('太晚了,不行')
	return inner
	
@can_play
def play_game(name,game):
	print('{}正在玩{}'.format(name,game))

play_game('张三','王者荣耀',18)
play_game('李四','绝地求生',22)

如果要使用**kwargs,可以这样修改:
	play_game('张三','王者荣耀',clock=18)
	clock=kwargs['clock']
	if clock<=22:
		fn(x,y)
但是修改了会有begud,可以修改为clock = kwargs.get('clock',23 )