zoukankan      html  css  js  c++  java
  • 迭代 三元。。。

    叠加多个装饰器:
    1.装饰器的加载顺序是:自下而上
    2.装饰器内wrapper函数的执行顺序是:自上而下
    即先把离原始index最近的装饰器加载进去使index的地址变成第一个装饰器的wrppper1(index),在加载第二个
    装饰器的时候使index的内存地址变成wrppper1(index)的内存地址即wrppper2(wrppper1(index))



    迭代器:

    1.什么是迭代器?
    迭代指的是一个重复的过程,每一次重复都是基于上一次的结果而来的。
    类似:
    li=['a','b','c','d']
    i=0
    while i<len(li):
    print(li[i])
    i+=1
    迭代器指的是迭代取值的工具,该工具的特点是可以不依赖索引取值。

    2.为什么要用迭代器?
    1.就是为了找出一种通用的可以不依赖与做一名的迭代取值方式
    2.




    3.如何要用迭代器?
    可迭代的对象:但凡内置有。__inter__方法的对象都称之为可迭代对象
    (str,list,tuple,dict,set,文件对象)
    迭代器对象 :即内置有__iter__方法,又内置有__next__方法
    (文件对象)
    调用可迭代对象的__iter__会得到一个迭代器对象
    调用可迭代器对象的__iter__会得到迭代器本身


    4.总结迭代器的优缺点:
    优点:1.提供了一种通用的可以不依赖于索引的迭代取值方式
    2.同一时刻在内存中只有一个值,更加节省内存

    缺点:1.取指定值不如索引灵活
    2.无法预知迭代器数据的个数
    3.只能一次使用基于上一次的next的结果执行下一次,一旦想重新使用只能重新生成



    可迭代对象可以转换称迭代器对象:调用可迭代对象内置的__iter__方法会有一个返回值,该返回值是可迭代器对象。
    li={'a':11,'b':22,'c':34,'d':55}
    iter_li=li.__iter__()
    print(iter_li)
    res1=iter_li.__next__()
    print(res1)
    res2=iter_li.__next__()
    print(res2)
    两次取值不同





    for循环准确的说应该是迭代器循环
    1.先调用in后面那个值的__iter__方法,得到迭代器对象。
    2.执行迭代器,__next()__方法得到一个返回值,然后赋值给一个变量,运行循环体代码,
    循环反复,直到迭代器取完值......



    自定义迭代器:
    yield关键字:只能用在函数内
    在函数内但凡包含yield关键字,再去执行函数,就不会立刻运行函数体代码了
    会得到一个返回值,该返回值称之为生成器对象,生成器本质就是迭代器。

    总结yield:
    1.提供一种自定义迭代器的解决方案
    2.yield可用于返回值
    yield VS return
    相同点:都可以用于返回值
    不同点:yield可以暂停函数,返回多次值;return作为返回值只返回一次值就结束函数

    例子:
    def func():
    print('xxxxx1')
    yield 1
    print('xxxxx2')
    yield 2
    g=func()
    res=next(g)
    print(res)#返回值是打印1
    res2=next(g)
    print(res2)
    超出报错







    三元表达式:
    def max2(x,y):
    if x>y:
    return x
    else:
    return y
    相当于:
    res=x if x>y else y


    列表生成式:
    l=[]
    for i in range(1,11):
    if i>4:
    res='egg%s'%i
    l.append(res)
    print(l)
    相当于:
    l=['egg%s'%i for i in range(1,11) i
    f i>4]
    print(l)


    列表元素更改__添加
    names=['egon','apple','alxe']
    L=[‘%s_ab’%name for name in names if name !=‘apple’ ]


    字典生成式
    Items=[(‘name’,’egon’) ,(‘age’,’18’), (‘sex’,’male’)]
    dic={}
    for k,v in items:
    dic[k]=v
    print(dic)
    相当于:
    res={k:v for k,v in items if k !=’sex’}
    print(res)



    生成器表达式:
    res=(i**2 for i in range(3))




  • 相关阅读:
    c# 事件阻断
    正则语义化API
    c# 防止继承和单例
    Maxscript 控制流混淆
    3dmax快速安装补丁的方法
    c# 使用类中的方法更新自己
    Maxscript 变量作用域
    Maxscript 键值对
    Maxscript 数据结构和算法记录
    Datawhale 之NLP学习-打卡(五)
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/9718703.html
Copyright © 2011-2022 走看看