day20
def run():
print('fron run')
print('fron run')
print('fron run')
print('fron run')
print('fron run')
run()
def test():
print('from run')
yield 1
print('from run')
yield 1
t=test()
next(t)
ptint('')
ptint('')
ptint('')
next(t)
next(t)
t.__next()
t.send('123')
res=True if age>10 else False
l=[i for i in range(10)]
g_l=(i for i in range(4))
def test():
for i in range(4):
yield id
t=test()
t1=(i for i in t)
for i in t1:
print(i)
print(list(t1)) #什么都没有
def test():
for i in range(4):
yield id
t=test()
t1=(i for i in t)
t2=(i for i in t1)
print(list(t1)) #[0,1,2,3]
print(list(t2)) #[]
l=[1,2,3]
l.__iter__() #iter(l)
装饰器:本质就是函数,功能为其他函数添加附加功能
原则:
不修改被修饰函数的源代码
不修改被修饰函数的调用方式
import time
def cal(l)
start_time=time.time()
res=0
for i in l:
time.sleep(0.1)
res+=i
stop_time=time.time
time=stop_time-start_time
print('函数的运行时间是%s' %time)
return res
print(cal(range(100)))
def index():
pass
def home():
pass
装饰器的知识储备
装饰器=高阶函数+函数嵌套+闭包
import time
def timmer(func):
def wrapper(*args,**kwargs)
start_time=time.time()
res=func(*args,**kwargs)
stop_time=time.time()
print('函数运行时间是%s' %(stop_time-start_time))
return res
return wrapper
@timmer
def cal(l)
# start_time=time.time()
res=0
for i in l:
time.sleep(0.1)
res+=i
# stop_time=time.time
# time=stop_time-start_time
# print('函数的运行时间是%s' %time)
return res
print(cal(range(20)))
高阶函数
1、函数接收的参数是一个函数名
2、函数的返回值是一个函数名
import time
def foo():
time.sleep(3)
print('你好啊林师傅')
def test(func):
# print(func)
start_time=time.time()
func()
stop_time=time.time()
print('函数运行时间%s' %(stop_time-start_time))
test(foo)
def foo():
print('from the foo')
def test(func):
return func
#res=test(foo)
#print(res)
#res()
foo=test(foo)
foo()
import time
def foo():
time.sleep(3)
print('from the foo')
#不修改foo源代码
#不修改foo调用方式
def test(func):
start_time=time.time()
func()
stop_time=time.time()
print('函数运行时间%s' %(stop_time-start_time))
return func
foo=test(foo)
foo()
#结果 多运行了一步
from the foo
函数运行时间3.00064754486084
from the foo
def bar():
print('from bar')
def foo():
print('from foo')
def test():
pass #在函数内部定义另一个函数
def father(name):
print('from father %s' %name)
def son():
# name='linhaifeng'
print('from son %s' %name)
# print(locals()) #name son
def grandson():
# name='就是我自己'
print('from grandson %s' %name)
grandson()
son()
father('alex')
def father(name):
print('from father %s' %name)
def son():
print('from son')
def grandson():
print('from grandson')
grandson()
son()
father('linhaifeng')
def timer(func): #自己思考的 没有实现功能
def test():
starttime=time.time
func()
stoptime=time.time
print('运行时间为%s' %(stop_time-start_time))
test()
return func
res=timer(foo)
#装饰器的框架
def timmer(func):
def wrapper():
print(func)
func()
return wrapper
import time
def timmer(func):
def wrapper():
start_time=time.time()
func() #就是在运行test
stop_time=time.time()
print('运行时间为%s' %(stop_time-start_time))
return wrapper
@timmer test=timmer(test)
def test():
time.sleep(3)
print('test函数运行完毕')
test()
#test=timmer(test) #返回的是wrapper的地址
#test() #执行的是wrapper函数
@timmer 就相当于 test=timmer(test)
#函数闭包加上返回值
import time
def timmer(func):
def wrapper():
start_time=time.time()
res=func() #就是在运行test
stop_time=time.time()
print('运行时间为%s' %(stop_time-start_time))
return res
return wrapper
@timmer #test=timmer(test)
def test():
time.sleep(3)
print('test函数运行完毕')
return '这是test返回值'
res=test() #就是在运行wrapper
print(res)
加参数
import time
def timmer(func):
def wrapper(name,age):
start_time=time.time()
res=func(name,age) #就是在运行test
stop_time=time.time()
print('运行时间为%s' %(stop_time-start_time))
return res
return wrapper
@timmer #test=timmer(test)
def test(name,age):
time.sleep(3)
print('test函数运行完毕')
return '这是test返回值'
@timmer # test=timmer(test)
def test1(name,age,gender):
time.sleep(3)
print('test1函数运行完毕')
return '这是test1返回值'
res=test() #就是在运行wrapper
print(res)
test1('alex',19,'male')
#解决方案
import time
def timmer(func):
def wrapper(*args,**kwargs):
start_time=time.time()
res=func(*args,**kwargs) #就是在运行test
stop_time=time.time()
print('运行时间为%s' %(stop_time-start_time))
return res
return wrapper
@timmer #test=timmer(test)
def test(name,age):
time.sleep(3)
print('test函数运行完毕 名字是%s' %name)
return '这是test返回值'
@timmer # test=timmer(test)
def test1(name,age,gender):
time.sleep(3)
print('test1函数运行完毕性别是%s' %gender)
return '这是test1返回值'
res = test('linhaifeng',18) #就是在运行wrapper
print(res)
test1('alex',19,'male')
解压序列
a,b,c=(1,2,3)
l=[10,3,2,3,5,1,2,3,5,8,9]
a,*_,c=l
a=1,b=2 交换值
x=a
a=b
b=x
f1=1
f2=2if
f1,f2=f2,f1
user_list=[
{'name':'alex','passward':'123'},
{'name':'linhaifeng','passward':'123'},
{'name':'wupeiqi','passward':'123'},
{'name':'yuanhao','passward':'123'}
]
current_dic={'user_name':None,'log':False}
def log(login_type='filedb'):
def login(func):
def wrapper(*args,**wkargs):
print('%s' %login_type)
if login_type=='filedb':
if current_dic['user_name'] and current_dic['log']:
res = func(*args, **wkargs)
return res
name = input('请输入登录名')
passward = input('请输入密码')
for user_dic in user_list:
if name == user_dic['name']:
current_dic['user_name'] = user_dic['name']
if passward == user_dic['passward']:
current_dic['log'] = 'True'
res=func(*args,**wkargs)
return res
else:
print('用户名或密码错误')
elif login_type=='ldap':
print('不知道怎么玩')
else:
print('不知道')
return wrapper
return login
@log(login_type='filedb') #login的内存地址 相当于 @login 附加了一个login_type,
def index():
print('欢迎来到京东主页')
@log(login_type='ldap')
def home(name):
print('欢迎回家%s' %name)
@log(login_type='sssss')
def shopping_car(name):
print('%s购物车里有%s,%s,%s' %(name,'奶茶','妹妹','娃娃'))
def order():
pass
index()
home('alex')
shopping_car('产品经理')
2018-08-24