博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python生成器 Generator
阅读量:6708 次
发布时间:2019-06-25

本文共 1985 字,大约阅读时间需要 6 分钟。

生成器 Generator

  什么是生成器?

    生成器是能够动态提供数据的可迭代对象
    生成器在程序运行时生成数据,与容器类不同,它通常不会在内存中保存大量的数据,而是现用现生成

  生成器有两种:

    生成器函数
    生成器表达式

  生成器函数

    含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
    注: yield翻译为(产生或生成)

  yield 语句

    语法:
      yield 表达式
    说明:
      yield 用于 def函数中,目的是将此函数作用生成器函数使用yield 用来生成数据,供迭代器的next(it) 函数使用

    说明:

      生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
      生成器函数调用return会触发一个StopIteration异常,即生成数据结束

  生成器表达式

    语法:
      ( 表达式 for 变量 in 可迭代对象 [if 真值表达式] )
    说明:
      if 子句可以省略
    作用:
      用推导式形式创建一个新的生成器

    示例:      gen = (x**2 for x in range(1, 5))      it = iter(gen)      next(it) # 1      next(it) # 4      next(it) # 9      next(it) # 16      next(it) # StopIteration
View Code

  列表推导式和生成器表达式的区别:

    推导式会创建容器,容器中已有数据
    生成器表达式创建的生成器没有数据,在调用时会自动生成

  示例:    for x in [x**2 for x in range(1000000000000)]:      print(x)    for x in (x**2 for x in range(1000000000000)):      print(x)
View Code
  看下列函数的输出结果是什么?为什么?  第一个程序    L = [2, 3, 5, 7]    A = [x * 2 for x in L]    it = iter(A)    print(next(it)) # 4    L[1] = 333    print(next(it)) # 6  第二个程序    L = [2, 3, 5, 7]    A = (x * 2 for x in L)    it = iter(A)    print(next(it)) # 4    L[1] = 333    print(next(it)) # 666
View Code

  迭代工具函数

  zip(iter1, iter2, ....) 返回一个zip生成器对象,此对象用于生成一个元组,此元组的数据分别来自于参数中的每个可迭代对象,生成元组的个数由最小的一个可迭代对象大小决定enumerate(iterable, start=0) 返回一个 enumerate生成器对象,此对象生成类型为(索引,值)对的元组,默认索引从0
开始,也可以用start指定

  zip  numbers = [10086, 10000, 10010, 95588]  names = ['中国移动', '中国电信', '中国联通']  for t in zip(numbers, names):    print(t) # 打印 (10086, '中国移动'), .....  for num, name in zip(numbers, names):    print(name, '的客服电话是:', num)  for t in zip(names, numbers, range(1, 100)):    print(t) # ('中国移动', 10086, 1), ...
View Code

 

  enumerate.py  names = ['中国移动', '中国电信', '中国联通']  for t in enumerate(names):    print(t) # (0, '中国移动'), (1, '中国电信') ....  for t in enumerate(names, 1111):    print(t)# (1111, '中国移动'), (1112, '中国电信') ....
View Code

转载于:https://www.cnblogs.com/zhaoyang1997/p/10585882.html

你可能感兴趣的文章
keepalived DROP vrrp与配置文件详解
查看>>
RBF高斯径向基核函数-svm
查看>>
Python调用自然语言处理包HanLP
查看>>
学习dubbo(7):基于dubbo的分布式系统架构介绍
查看>>
Oracle数据库账号频繁被锁定的原因排查
查看>>
java基础——字符串操作
查看>>
如何在 "万一的 Delphi 博客" 回复自动格式化的着色代码?
查看>>
Oracle小数点保留问题
查看>>
Objective-C之成魔之路【17-内存管理】
查看>>
Protostuff一键序列化工具、Protobuf JAVA实现
查看>>
微信小程序 - does not have a method ......
查看>>
车牌识别。EasyPR OpenALPR
查看>>
ttserver 常见操作
查看>>
通过 mysqldump 搭建基于 gtid MySQL 5.7 主从复制
查看>>
dojo框架学习笔记-1
查看>>
strcpy函数简易实现
查看>>
如何升级mac os x自带的ruby?
查看>>
python参数解析
查看>>
了解 MyCat
查看>>
一道SQL面试题~
查看>>