装饰器

装饰器目的:在不改变原函数代码,在函数执行前后自定义功能。

装饰器格式:

def 外层函数(参数):

  def 内层函数(*args,**kwargs):

    return 参数(*args,**kwargs)

  return 内层函数

def x(func):

  def y():

    ret = func()

    return ret

  return y

装饰器的应用

@x

def index():

  pass

执行函数,自动出阿发装饰器了

v= index()

print(v)

推导式

列表推导式

目的:方便的生成一个列表

格式:v = [i for i in 可迭代对象]  

   v= [i for i in 可迭代对象 if 条件]  条件为True才进行append

v1 = [i for i in 'zcy']  v1 =['z','c','y']

v2 = [i for i in ['zcy','aaa']]  v2 = ['zcy','aaa']

v3 = [i+10 for i in range(10)]    v3 = [11,12,13,14,15,16,17,18,19]

v4 = [99 if i > 5 else 66 for i in range(10)]

v5 = [lambda :i for i in range(10)]

res = v5(4)()  全部都是9

v6 = [lambda x:x*i for i in range(10)]  此时i等于9

v6里面是十个内存地址

v6[0](2)  结果是18

def num():
   ...:     return [lambda x:i*x for i in range(4)]

print([m(2) for m in num()])    #求值

筛选

v = [i for i in range(10) if i > 5]  条件成立True append进去,不成立不append

元组推导式

和列表生成式一样,括号变成{},去重

字典推导式

v = {'k'+str(i):i for i in range(10)}

data_list = [
(1,'hahah',19),
(2,'zzz',84),
(3,'ccc',73)
]
info_list = {i[0]:(i[1],i[2]) for i in data_list}


元数据:flask框架
多个装饰器:flask框架



迭代器
自己不会写迭代器,只用
迭代器:帮助你对 某种对象 中的元素进行逐一获取,表象:具有__next__方法且每次调用都获取可迭代对象长得元素
列表转成迭代器: v1 = iter(1,2,3,4) /等价 v1 = (1,2,3,4).__iter__()
迭代器想要获取每个值:反复调用 val = v1.__next__()
直到报错:StopIteration错误,表示已经迭代完毕

如何判断一个对象是否是迭代器:内部是否有__next__方法

可迭代对象
内部具有__iter__方法且返回一个迭代器
可以被for循环


生成器:
函数中如果存在yield,那么该函数就是一个生成器函数,调用生成器函数会返回一个生成器,
生成器可以被for循环时,
生成器函数内部的代码会执行,每次循环都会获得yield返回的值
特殊的可迭代对象
for i in func()
  print(i)

也可以使用next从生成器中取值,建议使用for循环
def func():
  print(1)
  yield 666
val = func()
res = next(val)
print(res)  >>>>666
使用next可以推动生成器的执行

 
原文地址:https://www.cnblogs.com/nice777/p/10981897.html