可迭代对象:obj.__iter__
 
迭代器:iter1=obj.__iter()
1iter1.__next__
2iter2.__next__
 
迭代器:
优点:不依赖索引
            惰性计算,节省内存
缺点:
        不如按照索引的取值方便
         一次性,只能往后取,不能回退
 
迭代器的应用:
  • 提供了一种不依赖索引的统一的迭代方法
  • 惰性计算,比如取文件的每一行

判断可是否是可迭代对象和迭代器

from collections import Iterable, Iterator # 导入模块功能

isinstance(a, Iterable) 查看a是否为可迭代对象

isinstance(a, Iterator) 查看a是否为可迭代器

迭代器:

 d={'a':1,'c':2,'b':3}

 obj=d.__iter__()
while 1: #while 迭代
try:
i=obj.__next__()
print(i)
except StopIteration:
break for i in d: #for 迭代
print(i)
字符串,列表元组,字典,集合,文件都是可迭代的,只有文件是迭代器

生成器:

生成器函数:函数体内包含有yield关键字,该函数的执行结果是生成器函数
生成器函数运行的得到生成器
生成器就是迭代器
yield的功能:
  • 与return 类似,都可以返回值,但不一样的地方在于yeild返回多次值,而return只能返回一次值
  • 为函数封装好了__iter__ 和__next__,把函数的执行结果做成一个迭代器
  • 遵循迭代器的取值方式obj.__next(),触发的函数执行,函数暂停与再继续的状态都是由yiel保存

(包含yield的函数)
  yield 可以进行返回值操作,如果后面没有yield拦住,作为返回值,会报错 StopIteration  
    def foo():
      print(111)
      yield 1 # 如果打印下面.__next__的结果的话,会打印这个返回值
      print(222)

    f = foo() # 运行这一句的时候,系统不会运行 foo(),而是直接生成一个迭代器f
    f.__next__()
    f.__next__()

 def producer():
print('first------>')
yield 1
print('second------>')
yield 2
print('third------->')
yield 3 for i in producer():
print(i)
def countdown(n):
print('start countdown') while n>0:
yield n
n-=1
print('stop countdown') for i in countdown(9):
print(i)

列表解析
  # 要求:将 s = 'hello' 放到新列表中
  [i.upper() for i in s] # for 循环得到i,将i作为列表的元素
  # 要求:判断列表 l = [1,31,73,84,57]中的元素, 如果大于30,就将i加入新列表
  res = [i for i in l if i > 30]
      加入字典的值(i)   循环( for i in l )     条件( if i > 30 )

三元表达式
  res = 2 if 2 > 3 else 3     # 正确时执行 判断条件 错误时执行
  print(res)
  结果:3            # 执行结果为 3

学习实例:

import time
def tail_func(filename,encoding='utf-8'):
with open(filename,'r',encoding=encoding) as f:
f.seek(0,2)
while 1:
line=f.readline()
if line:
yield line
else:
time.sleep(0.5) def grep_func(lines,pattern):
for line in lines:
if pattern in line:
print( line) b=tail_func('b.txt')
c=grep_func(b,'error')
for i in grep_func(c,''):
print(i)

编写 tail -f a.txt |grep 'error' |grep '404'命令

函数---迭代器&生成器&列表解析&三元表达式的更多相关文章

  1. day4 内置函数 迭代器&生成器 yield总结 三元运算 闭包

    内置函数: 内置函数 # abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. b = -100 print(b) print(abs(b)) # all() 所有为真才为真,只要有一 ...

  2. Python 迭代器和列表解析

    Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...

  3. python函数-迭代器&生成器

    python函数-迭代器&生成器 一.迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议: ① 协议内容:内部实现__iter__方法 ...

  4. Python(五)之迭代器和列表解析

    Python迭代器和列表解析 迭代器 例如: In [1]: l1 = [1,2,3,4,5] dir(i1)可以看到内置方法'__iter__' 生成一个迭代器: l1.__iter__,或i2 = ...

  5. Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式

    迭代器和生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...

  6. 3、Python迭代器、列表解析及生成器(0530)

    1.动态语言 sys.getrefcount()    //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...

  7. xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式

    import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...

  8. 函数与函数式编程(生成器 && 列表解析 && map函数 && filter函数)-(四)

    在学习python的过程中,无意中看到了函数式编程.在了解的过程中,明白了函数与函数式的区别,函数式编程的几种方式. 函数定义:函数是逻辑结构化和过程化的一种编程方法. 过程定义:过程就是简单特殊没有 ...

  9. python学习-迭代器,列表解析和列表生成式

    迭代器为类序列对象提供了一个类序列的接口.Python 的迭代无缝的支持序列对象,而且还允许程序猿迭代非序列类型,包括用户定义的对象. 迭代器是一个next()方法的对象,而不是通过索引计数.当需要下 ...

随机推荐

  1. Python Socket 网络编程 (客户端的编程)

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  2. 【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

    学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Coco ...

  3. 什么是 HTTPS

    HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议. 你也可以说:HTTPS = HTTP + SSL HTTPS 在 ...

  4. JAVA 虚拟机内存

    1.普通java应用程序,使用java命令运行, java -Xms1024m -Xmx1024m -XX:MaxNewSize=256m  -XX:MaxPermSize=256m -jar 2.t ...

  5. Unity3D学习笔记——IDE工作视图

    Unity3D中五个界面的使用: Project视图:存放游戏资源,比如贴图,音频,JS脚本等 Project中可创建的文件如下: Hierarchy视图:主要存放游戏场景中的对象,如摄像机,精灵,箱 ...

  6. SSH总结(二)

    1.文件的操作,读写文件,解决乱码问题 读文件 InputStreamReader isr = new InputStreamReader(new FileInputStream(new File(p ...

  7. linux命令之面试题1

    1.请解释下列10个shell命令的用途 top:是linux下常用的性能分析工具,能够实时的显示系统中各个进程的资源占用情况,类似于windows的资源管理器,查看系统的cpu,内存,运行时间,交互 ...

  8. PHP中常用的输出语句比较?

    面试中经常问到这个,可以看下. 面试问题:比较echo print() print_r()  var_dump()? echo(): 可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(la ...

  9. SAP FI 中4个特殊期间

    标准SAP ERP里面有个13-16的4个特殊的会计期间,这4个特殊的会计期间如何使用?作用是什么? SAP记帐期间变式,会计年度与特殊期间. 记帐期间变式是较难理解的一个内容.不过要表达的内容很简单 ...

  10. http://www.haolizi.net/example/view_2380.html

    null