生成器表达式

  (满足条件的元素或其相关的操作 for 元素 in 可迭代对象 if 条件)

g = (i for i in range(10))
for i in g:
print(i)
egg_lis = ('鸡蛋%s' %i for i in range(10))
print(egg_lis)
for i in egg_lis:
print(i)

  生成器取值send()

  send效果在获取下一个值的时候和next相似,不同之处可以给上一个yield的位置传数据。

    第一个取值必须要用__next__()来取值不能用send()

    最后一个yield也不能接收外部的数据

def generator():
print('zxc')
content = yield 1
print('==='+content)
print('zxf')
yield 2
g = generator()
print(g.__next__())
# print(g.__next__())
print(g.send('good'))

  生成器实例

# 计算移动平均值

def average():
total = 0
count = 0
avg = 0
while True:
num = yield avg
total += num
count += 1
avg = total / count
avg_g = average()
avg_g.__next__()
avg1 = avg_g.send(10)
avg2 = avg_g.send(20)
print(avg1, avg2)

  上面的实例中avg_g.__next__()的返回值没有什么意义,只是起到了一个激活生成器的效果。为了方便多个生成器的激活,这里就可以使用预激生成器的装饰器

def init(func):
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
ret.__next__()
return ret
return inner @init
def average():
total = 0
count = 0
avg = 0
while True:
num = yield avg
total += num
count += 1
avg = total / count
avg_g = average()
print(avg_g.send(10))
print(avg_g.send(20))

  推导式

  格式:满足条件的元素或其相关的操作 for 元素 in 可迭代对象 if 条件

  各种推导式:生成器(),列表[],字典{},集合{}

    1,遍历操作

    2,筛选操作

  列表推导式

egg_lis = ['鸡蛋%s' %i for i in range(10)]
print(egg_lis)

  生成器推导式

g = (i for i in range(10))
for i in g:
print(i)

  字典推导式

# 将一个字典中的key和value对调
dic = {'k1': 'v1', 'k2': 'v2'}
dic_swop = {dic[k]: k for k in dic}
print(dic_swop) # {'v2': 'k2', 'v1': 'k1'}

  集合推导式

# 集合推导式  自带结果去重功能
set1 = {i for i in [1, 3, 5, 5, 6, 3, 4]}
print(set1) # {1, 3, 4, 5, 6}

    

python基础十二之生成器进阶的更多相关文章

  1. Python基础(十二) 类私有成员和保护成员

    python中的protected和private python中用 _var :变量名前一个下划线来定义,此变量为保护成员protected,只有类及其子类可以访问.此变量不能通过from XXX ...

  2. python 基础(十二) 图片简单处理

    pillow 图片处理模块 安装 pip install pillow  pip是安装第三方模块的工具 缩放图片实例 from PIL import Image path = r'C:\Users\x ...

  3. Bootstrap <基础十二>下拉菜单(Dropdowns)

    Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...

  4. Python 基础语法(二)

    Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...

  5. 初学 Python(十四)——生成器

    初学 Python(十四)--生成器 初学 Python,主要整理一些学习到的知识点,这次是生成器. # -*- coding:utf-8 -*- ''''' 生成式的作用: 减少内存占有,不用一次性 ...

  6. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  7. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  8. python基础知识(二)

    python基础知识(二) 字符串格式化 ​ 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 ​ print(' %s is boy'%('tom')) ----> ...

  9. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

随机推荐

  1. 用Direct2D和DWM来做简单的动画效果2

    原文:用Direct2D和DWM来做简单的动画效果2 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunnyloves/article/detai ...

  2. liferay 7用OSGi的方式修改默认权限

    事先声明,支持这一功能的新版本还没有发布,2017年5月份才支持的 1.以前在62的时候是通过修改ext项目进行修改 2.现在在70可以通过Module Fragment项目进行修改 相关文件:现在出 ...

  3. Python 中的 map, reduce, zip, filter, lambda基本使用方法

    map(function, sequence[, sequence, ...] 该函数是对sequence中的每个成员调用一次function函数,如果参数有多个,则对每个sequence中对应的元素 ...

  4. springboot security 安全

    spring security几个概念 “认证”(Authentication) 是建立一个他声明的主体的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统) . “授权 ...

  5. Node.js入门笔记

    第一步自然是安装了.我是用Webstorm这个ide,安装分2步: 1.安装nodejs,下载Windows下的安装版本号.注意是以msi为扩展名的,然后下一步.没啥好说的,下载地址例如以下: 32位 ...

  6. Liferay OSGi注解(Annotation) - 使用手册(译文)

    mark过来好好用 上Neil的博客地址Liferay OSGi注解(Annotation) - 使用手册(译文) @Component是注入服务 @Reference是获取服务(在Liferay框架 ...

  7. 新一代视频AI服务 —— 阿里云智能视觉重磅发布

    3月27日下午,第51期阿里云产品发布会-智能视觉产品隆重发布,本次产品发布会首次面向全网用户深入的解读了智能视觉的前世今生. 行业背景 随着人工智能的技术不断成熟,AI逐渐在各行业内落地.在新零售领 ...

  8. mysql通过日志恢复数据库

    案例:http://www.linuxidc.com/Linux/2012-11/74005.htm http://blog.csdn.net/ssrc0604hx/article/details/1 ...

  9. 【JZOJ4861】【NOIP2016提高A组集训第7场11.4】推冰块

    题目描述 Dpstr最近迷上了推冰块.冰地是一个n行m列的网格区域,第i行第j列的格子记为(i,j),也就是左上角为(1,1),右下角为(n,m).每个格子可能是冰面.障碍物.减速带三者之一.其中,冰 ...

  10. 【JZOJ4824】【NOIP2016提高A组集训第1场10.29】配对游戏

    题目描述 流行的跳棋游戏是在一个有m*n个方格的长方形棋盘上玩的.棋盘起初全部被动物或障碍物占满了.在一个方格中,'X'表示一个障碍物,一个'0'-'9'的个位数字表示一个不同种类的动物,相同的个位数 ...