Python基础-DAY15

生成器 Generator  和  迭代器  Iterator

什么是生成器:

   生成器是一种可以简单有效的创建迭代器的工具

 

生成器有两种:

  生成器函数 和 生成器表达式  

 

什么是生成器函数:

   含有yield语句的函数是生成器函数,此函数被调用时返回一个生成器对象

   注:yield 翻译为产生或生成

 

示例:

  def myyield():

      yield 2

      yield 3

      yield 5

      yield 7

 

yield 语句

语法:

  yield 表达式

语法说明:

  yield用于def函数中,目的是将此函数作为生成器函数使用

  yield用来生成数据,供迭代器的next(it) 函数使用

 

range(start, stop, step) 就是生成器函数

 

生成器函数说明:

  生成器函数的调用将返回一个生成器对象,生成器对象用来生成迭代器

  在生成器函数内调用return会产生一个StopIteration异常

 

什么是迭代器:

  是指能用next(it)函数取值的对象(实例)

 

用iter(obj) 函数可用可迭代对象(序列等或生成器)返回一个迭代器

 

迭代器说明:

  迭代器是访问可迭代对象的一种方式

  迭代器只能往前取值,不会后退

 

示例:

  L = [1,3,5,7]

  it = iter(L)  # 用 L 来返回一个迭代器

  next(it)  # 返回1

  next(it)  # 返回3

  next(it)  # 返回5

  next(it)  # 返回7

  next(it)  # StopIteration 异常

 

  # 内部实质是先获取迭代器,再用next从迭代器中获取数据

  for x in L:

      print(x)

  示例:

    # 将以上语句转为while语句实现

it = iter(L)

while True:

    try:

        print(next(it))

    except StopIteration:

        break

 

函数

iter(x)  从一个对象中返回迭代器(x必须是可迭代对象)

next(it) 从迭代器it中获取下一个记录,如果无法获取,则会触发StopIteration异常

 

iter用于生成器示例:

gen = range(1, 10, 3)

it = iter(gen)

next(it)  # 1

next(it)  # 4

next(it)  # 7

next(it)  # StopIteration

 

 

示例:

  # 写一个生成器函数,生成0~n之间的偶数:

  def myeven(n):

      for i in range(0, n+1, 2):

          yield i

 

  for x in myeven(10):

     print(x)

  # 请问列表和myeven(n)的区别是什么?

  L = [0, 2, 4, 6, 8, 10]

  for x in L:

      print(L)

 

 

总结:

生成器函数(可以返回生成器)

  range()

 

可迭代对象 iterable(可以返回迭代器)

  list, dict, str, tuple, set, frozenset

 

生成器 Generator (可以返回迭代器)

 

迭代器 iterator (可以用next函数访问可迭代对象的元素)

 

 

生成器表达式:

作用:

  用推导式形式生成一个新的生成器

语法:

  (表达式 for 变量 in 可迭代对象 [if 真值表达式])

 

注: if子句可以省略

示例:

   gen = ( x**2 for x in range(1, 6, 2))

   it = iter(gen)

   next(it)  # 1

   next(it)  # 9

   next(it)  # 25

   next(it)  # StopIteration

 

 

迭代工具函数

  作用:

    生成一个个性化的可迭代对象(生成器)

 

函数:

zip(iter1, iter2, ...) 返回一个zip对象,此对象用于生成元组,此元组的个数由最小的可迭代对象决定

 

enumerate(iterable ,start=0) 生成带索引的枚举对象,返回的迭代类型为索引-值对(index-value)对,默认索引从零开始,也可以用start指定

 

zip示例:

  numbers = [10086, 10000, 10010, 95588]

  names = ["中国移动", "中国电信", "中国联通"]

  for x in zip(numbers, names):

      print(x)

 

  for x in zip(range(1,10000), numbers, names):

      print(x)

 

 

def mynumerate(it, start=0):

    for x in it:

        yield (start, x)

        start += 1

 

 

 

文件

什么是文件:

  文件是用于数据存储的单位

  文件通常用来长期保存数据

 

文件的打开(open)的关闭(close):

  文件需要在使用时先打开才能读写

  在不需要读写文件后,应及时关闭文件以释放系统资源

  任何操作系统对打开的文件数有最大数限制

 

文件的打开函数open

  open(文件路径, mode='r') 用于打开一个文件,返回此文件流对象,打开失败则会触发IOError错误!

 

文件关闭方法:

  F.close()   关闭文件,释放系统资源

  F 代表文件流对象

示例见:

  open.py

 

文件的常用方法:

F 代表文件流对象

F.close()  关闭文件

F.readline() 读取一行数据,如果到达文件尾则返回空字符串

F.readlines(max_char=-1) 返回每行字符串列表, max_char为最大字符数

F.writelines(lines) 字符串列表的内容写到文件中

F.read(size=-1)   从一个文件流中最多读取size个字符(或字节(仅二进制))

F.write(text) 写一个字符串(或字节)到文件流中,返回写入字符数(或字节数)

猜你喜欢

转载自blog.csdn.net/qq_41797451/article/details/81347188