zoukankan      html  css  js  c++  java
  • 迭代器,生成器

    迭代器

    W?

    迭代是指重复迭代每一次都是基于上一次的结果而来

    作用?

    提供一种不依赖与搜引的取值方式

    l = [1,2,3] i = 0 while i <len(l): print(l[i]) i+=1

    需要迭代的取值的有:字符串,列表,元组,字典,集合

    字典。集合是无序的,无法依赖索引值取值,就需要迭代器

    可迭代对象

    str , list, dict , tuple , set , f

    都是可迭代对象,只要内置有 .(——iter——)方法的都是可迭代对象

     

     

    迭代器对象——迭代器对象也是可迭代对象

    获取迭代器,通过(——iter——)方法,返回值就是迭代器对象

     

    如何迭代取值:迭代器对象.——next——

    每一次执行都会从迭代器对象取值

    优点:

    索引不依赖索引值

    节省内存空间

    缺点:

    取某个值麻烦

    每次取值都从第一个开始,无法索引

    得带器对象一定是可迭代对象,不一定是迭代器对象

    f文件类型是可迭代对象,也是迭代器对象 迭代器对象调用多少次iter方法得到的还是迭代器对象本身 这就是f 可以用for函数的原因

     

     

    l = [1,2,3] l =l.iter() while True: try: print(l.next()) except StopIteration: break

    可迭代对象,只要有iter 内置函数就说明是可迭代对象 可迭代对象加上.--iter--后返回值就是迭代器对象

    for函数就是把可迭代对象转化为迭代器对象,内置whil,try函数,用.next不断取值从而实现迭代功能 迭代器:就是一种不依赖于索引取值的方式

    生成器:本质上是一个自定义的迭代器,(自己创造)

    def funnc(): print('from func')#调用不执行,.next()执行到yield的返回值后停止 yield 1 res = funnc() #生成器对象——迭代器对象 print(res.next())

    yield:

    只能在函数内部定义,不能外部使用,

    每一次yeild都会往生成器对象添加一个值,保存函数暂停状态

    凡是包含yeild 调用都不会执行代码,而是得到一个返回值,该返回值就是生成器对象

     

    自定义生成器: def my_range(start,end ,move =1): while start<= end: #实现顾头又顾尾巴 yield start start+=move

    for i in my_range(1,10): print(i) yield 与return 区别: 相同:返回值个数、类型都是无限制的 不同:return 返回一次值函数结束,yied返回多次值

    三元表达式: 普通表达式 def max (m,n): if m> n: return m else:n 三元表达式 def max2(m,n): res = n if n> m else m return res print(max2(1,2))

    列表生成式:一行的代码生成列表 语法:[] 优点:可以索引取值 缺点:浪费内存

    list1 = [f'a{i}' for i in range(1,100)] print(list1) 列表后边可以加if判断 #输出大于五十加上个大字 list2 = [f'大{i}' for i in range(1,100) if i>50] print(list2)

    生成器生成式:又名生成器表达式 语法:() 优点:节约资源 缺点:取值麻烦 g = (i for i in range(100)) print(g)

     

    匿名函数

    临时存在,一次性使用

    注意:不能单独使用,需要配合内置函数一起使用

     

    lambda 参数 :返回值

    请按照年龄排序 l = [ {'name':'alex','age':84}, {'name':'oldboy','age':73}, {'name':'egon','age':18}, ] res =sorted(l, key=lambda x :x['age']) res1 =sorted(l,reverse=True, key=lambda x :x['age'])

  • 相关阅读:
    1.1 git和github -1 介绍
    seajs使用
    seajs使用-1 解决冲突和依赖
    6. 菜单切换
    5. 背景半透明 元素不透明(兼容所有浏览器)
    4. 父元素如何包含子元素
    3. js 多维数组转为一维数组
    2. 伪数组转为数组 Array.prototype.slice.call(arguments)
    3. 伪元素清除最后一个border的边框
    2. 详解 CSS 属性
  • 原文地址:https://www.cnblogs.com/fxsm/p/11862737.html
Copyright © 2011-2022 走看看