#复习
# 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)