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

posted @ 2018-08-24 10:12  漫语慢蜗牛  阅读(109)  评论(0编辑  收藏  举报