第七节课,迭代器interator,生成器Generator,函数闭包,装饰器,语法糖

#1深入迭代器Interator
'''
(1)迭代集合元素,迭代单个没有意义
(2)只能向前迭代,迭代不能返回
(3)线程不安全(比如可变元素迭代完后更改值)
(4)迭代没有索引下标可以通过enumerate()自行创建索引
 (5)用几个迭代几个(惰性求值)
'''
setlist=["a","b","c","d","e"]
setllist=iter(setlist)
try:
    while True:
        varl=setllist.__next__()
        print(varl)
except StopIteration:
    pass
for din,ke in enumerate(setlist):
    print(din,ke)
'''
(1)使用iter()创建迭代器
(2)在for里面in后面的对象自动调用iter(for做好了异常处理)
(3)在函数里重写__iter__()方法和__next__()方法
'''
'''
2,生成器(Generator)

'''
#(1) 推导时使用括号就变成了生成器
lst=[1,2,3]
ss1=(x+1 for x in  lst)
#中括号返回列表解析
lst=[1,2,3]
ss1=[x+1 for x in  lst]
#(2)生成器函数(yield)
#每一次到yield停止,(暂停时变量封装在生成器中)
#下次调用再次循环
def yields():
    print("生成前")
    for a in range(10,0,-1):
        yield a
    print("生成后")
gety=yields()
print(gety.__next__())

'''
3.函数及闭包
'''
#(1)函数是第一类对象func是引用则func(1,2)是在调用函数(函数名是函数的引用)
#(2)多个引用可以指向同一个函数(也是对象)
def func(a,b):
    return a+b
add=func#这是将函数对象赋值给add
print(func(1,2))#这是在调用函数
print(add(1,2))
#(函数对象的引用也可也当作参数)callable("对象")是否可以调用
"""
嵌套函数(闭包)
jj返回值的是按照顺序查找的
(1)本地不被global(声明全局变量)声明的变量
(2)外围空间 上层函数(多次由内而外查找)
(3)再到全局 本函数空间
(4)内置模块 其他调用的模块中
"""
def diao():
    jj="在这里"
    def strs():
        jj="不在这里"
        return jj#*****
    return strs

def he(f):
    return f()
print(he(diao()))

'''
1,装饰器,和语法糖
(1)装饰器修饰函数
(2)装饰器是函数的一种运行环境
(3)装饰器是一个闭包
(4)语法糖简化修饰器
'''
def doupi(fn):
    def jiaduopi(*args):
        print("豆皮")
        return fn(*args)+10
    return jiaduopi

def xiangcai(fn):
    def jiaxiangcai(*args):
        print("香菜")
        return fn(*args)+5
    return jiaxiangcai

@xiangcai
@doupi
def dioguo(a,b):
    print("地锅50元")
    return a*b

#平常方法(顺序是由内向外计算)
xx=xiangcai(doupi(dioguo))
print("测试",xx(1,3))
#使用语法糖方法
print(dioguo(1,3))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值