生成器函数
生成器函数使用yield返回返回值。函数并没有结束,还可以继续执行。
生成器一次返回一个(组)数据。
def func1():
yield"h"
yield"e"
yield"l"
yield"l"
yield"o"
gen =func1()
生成器对象
循环生成器对象时,一次获取一个值。
for i in gen:
print(i)
将生成器对象强制类型转换为列表
#print(list(gen)
print(next(gen)) # "h"
print("123456")
print(next(gen)) # "e"
print("abcdef")
for i in gen:
print(i,end=" ") # "l" "l" "o"
元组生成器
gen1 = (2 ** i for i in range(1,65) )
print(gen1)
print(list(gen1))
生成器的使用场景: 产生或处理大量数据,使用生成器一个一个的处理(生成),用于节省内存空间。
- range(100) 产生某个范围内的整数。
斐波那契序列(兔子序列)
- 0 1 1 2 3 5 8 13 21 34 55 89 144 233
def feibo(n):
a,b,s = 0,1,1
while s < n:
s += 1
yield a #返回数据不会结束函数
a,b = b,a+b
for i in feibo(10000):
print(i)
input()
装饰器函数
定义:在不修改原函数代码的前提下,给原函数增加或修改功能,可以使用使用装饰器函数。
- 它是一个高阶函数。
- 将原函数作为参数,放到装饰器内部定义的函数中执行。
- 在内部函数中增加新的功能。
- 返回内部函数用于替换原函数。
def tools(func):
def inter(*args,**kwargs):
print("开始执行...")
res = func(*args,**kwargs)
print("结束执行...")
return res
return inter
@tools #装饰器语法 func = tools(func1)
def func1():
for i in range(10):
print(i,end=" ")
print()
func1()
获取某个函数运行n次的平均时间,使用装饰器函数实现它。
带参数的装饰器函数
def run_time_test(n):
def run_time(func):
def inter(*args,**kwargs):
start_time = time.time() #获取时间戳
for i in range(n):
temp_tim = time.time()
res = func(*args,**kwargs)
print("第{}次执行时长时间:{}".format(i+1,time.time()-temp_tim))
print("运行{}次的平均时长:{}".format(n,(time.time()-start_time)/n))
return res
return inter
return run_time
@tools
@run_time_test(10) # run_time_test(10)(func2)(m)
def func2(m):
s = 0
for i in range(m):
for j in range(m):
s +=1
return s
print("函数执行的结果:",func2(1000))
#装饰器函数的使用场景:框架中定义特定功能的函数,日志,验证,权限的管理。
input()
#装饰器函数的使用场景:框架中定义特定功能的函数,日志,验证,权限的管理。