#复习# def wapper(func):# def inner(*args,**kwargs):#接受聚合# set=func(*args,**kwargs)#调用打散#set=func()为接受返回值,不接受返回值# return set# return inner## @wapper# def holiday(a):# '''# 假的,# 都是假的,# '''# print('放假%s天'%a)# return"happy!"# set=holiday(4)#inner的返回值,用ret接收# print(set)#生成器函数#普通函数# def generator():# print(1)# return "a"# set=generator()# print(set)#生成器函数 :含有yield的函数(不与return共用,需要写在函数内部)# def generator():# print(1)# yield "a"# print(2)# yield"b"# yield'c'# #生成器函数执行之后,生成一个生成器作为返回值# set=generator()#执行后获获得一个生成器# print(set)# print(set.__next__())#执行后获得返回值,然后打印出来# print(set.__next__())# print(set.__next__())# #类似for循环#迭代器函数# def generator():# for i in range(20):# yield "wahaha%s"%i# g=generator()#上面是生成器,加上下面就转化成迭代器# count=0# for i in g:# print(i)# count +=1# if count >5:# break# # print("@@@",g.__next__())#执行下一个,不是从头开始## for i in g:#接着上一个for循环继续# print(i)# count +=1# if count >7:# break#文件监听# def generator(filename):# f=open(filename,encoding='utf-8')# while 1:# line=f.readline()# if line:# yield '*****',line.strip()# generator('file')## f=open('file',encoding='utf-8')# while 1:# line=f.readline()# if line:# print(line)# def generator(filename):# f=open(filename,encoding='utf-8')# while 1:# line=f.readline()# if line.strip():# yield line.strip()# g=generator('file')# for i in g:# if 'python' in i:# print('****', 'python')## def holiday(a):# '''# 假的,# 都是假的,# '''# print(holiday.__name__)# print(holiday.__doc__)#查看函数注释# def wapper(func):# def inner(*args,**kwargs):#接受聚合# '''假的,都是假的'''# set=func(*args,**kwargs)#调用打散#set=func()为接受返回值,不接受返回值# return set# return inner## @wapper# def holiday(a):# print('放假%s天'%a)# return"happy!"## print(holiday.__name__)# print(holiday.__doc__)#inner的注释# set=holiday(4)#inner的返回值,用ret接收# print(set)#带参数的装饰器# import time# flag=False# def time_out(flag):# def timmer(func):# def inner(*args,**kwargs):# if flag==True:#true则执行# start = time.time()# set=func(*args,**kwargs)# end =time,time()# print(end-start)# return set# else:#否则执行这个# set = func(*args, **kwargs)# return set# return inner# return timmer## @time_out(flag)# def run():# time.sleep(0.1)# print('sjkaj')## @time_out(flag)# def walk():# time.sleep(0.1)# print('jdskdaj')## run()# walk()#多个装饰器装饰一个函数# def wrapper1(func):# def inner1():# print('wrapper1 ,before func')# func()# print('wrapper1 ,after func')# return inner1## def wrapper2(func):# def inner():# print('wrapper2 ,before func')# func()# print('wrapper2 ,after func')# return inner## @wrapper2 #inner1# @wrapper1 #func# def f():# print('in f')## f()# # 结果# wrapper2 ,before func# # wrapper1 ,before func# # in f# # wrapper1 ,after func# # wrapper2 ,after func#记录用户登陆情况和时间# def wrapper1(func):# def inner1():# username=input('please input your name:')# password=input('please input your password:')# if username=='bts' and password=='130613':# func()# print('sucessful!')# else:# print('fail!')# return inner1# # import time# def wrapper2(func):# def inner():# func()# print(time.time())# return inner# # @wrapper2 #inner1# @wrapper1 #func# def f():# print('登陆记录')# # f()
#作业#1实行一次登陆,以后无需再次登陆# flag=False#全局变量# def login(func):# def inner(*args,**kwargs):# global flag#改变全局变量flag,实行一次登陆,以后无需再次登陆# if flag:#如果flag为true,直接运行修饰器函数# set = func(*args, **kwargs)# return set# else:# id=input("please input your id")# password=input('please input your password')# if id=='bts' and password=='130613':# flag=True#登陆成功,改全局变量为true,实现再次登陆直接运行if flag(true):# set = func(*args, **kwargs)# return set# else:# print('password or id is wrong')# return inner## @login# def shoplist_add():# print('add one good')## @login# def shoplist_del():# print('delete one good')# shoplist_add()#登陆成功# shoplist_del()#无需再次登陆# shoplist_del()#无需再次登陆#修改一次购物车,登陆一次# def login(func):# def inner(*args,**kwargs):# id=input("please input your id")# password=input('please input your password')# if id=='bts' and password=='130613':# set = func(*args, **kwargs)# return set# else:# print('password or id is wrong')# return inner## @login# def shoplist_add():# print('add one good')## @login# def shoplist_del():# print('delete one good')# shoplist_add()#登陆成功,运行# shoplist_del()#再次登陆,然后运行#2记录操作过程# def log(func):# def inner(*args,**kwargs):# with open('file','a',encoding='utf-8') as f:# f.write(func.__name__+'\n')#双下划线__# set = func(*args, **kwargs)# return set# return inner# @log# def shoplist_add():# print('add one good')## @log# def shoplist_del():# print('delete one good')## shoplist_del()# shoplist_add()#进阶作业# import os# from urllib.request import urlopen# def cache(func):# def inner(*args,**kwargs):# if os.path.getsize('file'):# with open('file','rb')as f:# return f.read()# set=func(*args,**kwargs)# with open('file','wb')as f:# f.write(set)# return set# return inner## @cache# def get(url):# code=urlopen(url).read()# return code## set=get('https://hao.360.cn/?a1004')# print(set)