1.生成器只能遍历一次
装饰起:本质就是函数,功能是为其他函数添加附加功能
原则:
1.不修改被修饰函数的源代码
2。不修改被调用函数的调用方式
高阶函数
1.函数接收的参数是一个函数名
2.函数的返回值是一个函数名
满足上述任一条就是高阶函数
import time
def foo():
time.sleep(3)
print("你好啊,电神")
def test(func):
start_time = time.time()
print(func)
func()
stop_tome = time.time()
print("函数运行时间是%s:" % (stop_tome - start_time))
test(foo)
变种
import time
def foo():
time.sleep(3)
print("你好啊,电神")
def test(func):
start_time = time.time()
#print(func)
func()
stop_tome = time.time()
print("函数运行时间是%s:" % (stop_tome - start_time))
return func
foo = test(foo)
foo()
#装饰器的一个实现
import time
def timer(func):
def wrapper():
start_time =time.time()
func()
stop_time = time.time()
print("运行时间是%s" % (stop_time-start_time))
return wrapper
@timer #就相当于是test = timer(test)
def test():
time.sleep(3)
print("test函数运行完毕")
#test = timer(test)
#test()
test()
这样就实现了不改变函数原来代码和调用情况的前提下,扩展了函数的功能
但是这样如果有返回值的话,会有问题,下面这样写就好了
#装饰器的一个实现
import time
def timer(func):
def wrapper():
start_time =time.time()
res = func()
stop_time = time.time()
print("运行时间是%s" % (stop_time-start_time))
return res
return wrapper
@timer #就相当于是test = timer(test)
def test():
time.sleep(3)
print("test函数运行完毕")
return 123
#test = timer(test)
#test()
res = test()
print(res)
解压序列
a,b,c = [1,2,3]
print(a,b,c)
实现的一个简单的装饰起
def addvarify(func):
def wrapper(*args, **kwargs):
username = input("请输入名字:")
userpasswd = input("请输入您的密码:")
if username =="sb" and userpasswd == "123":
res = func(*args, **kwargs)
return res
else:
print("错误")
return wrapper
@addvarify
def index():
print("欢迎来到迅美科技广场")
@addvarify
def home(name):
print("欢迎回家%s" %name)
@addvarify
def shopping_car(name):
print("%s的购物车里有【%s,%s,%s】" %(name ,"奶茶","妹妹","娃娃"))
index()
home("jasper")
shopping_car("jasper")
tag的作用:我们可以定义tag = True 这个变量来控制循环或者判断,在函数中调用或者改变这个值,从来决定循环或者判断

浙公网安备 33010602011771号