python基础十二之生成器进阶
生成器表达式
(满足条件的元素或其相关的操作 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基础十二之生成器进阶的更多相关文章
- Python基础(十二) 类私有成员和保护成员
python中的protected和private python中用 _var :变量名前一个下划线来定义,此变量为保护成员protected,只有类及其子类可以访问.此变量不能通过from XXX ...
- python 基础(十二) 图片简单处理
pillow 图片处理模块 安装 pip install pillow pip是安装第三方模块的工具 缩放图片实例 from PIL import Image path = r'C:\Users\x ...
- Bootstrap <基础十二>下拉菜单(Dropdowns)
Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- 初学 Python(十四)——生成器
初学 Python(十四)--生成器 初学 Python,主要整理一些学习到的知识点,这次是生成器. # -*- coding:utf-8 -*- ''''' 生成式的作用: 减少内存占有,不用一次性 ...
- 初学 Python(十二)——高阶函数
初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...
- Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
- python基础知识(二)
python基础知识(二) 字符串格式化 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 print(' %s is boy'%('tom')) ----> ...
- Python基础学习二
Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...
随机推荐
- 2019-10-18-dotnet-修复找不到-System.ServiceProcess-定义
title author date CreateTime categories dotnet 修复找不到 System.ServiceProcess 定义 lindexi 2019-10-18 21: ...
- bzoj1231 混乱的奶牛
Description 混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S ...
- Hdu 4291
题目链接 这道题, 给我的最大的知识点就是对于去模运算,一定可以找到循环节,这题只不过是嵌套了两层,可以分别找到循环节.关于这题如何找循环节的,直接暴力,网上也有很多. 找到循环节之后,另一个知识点就 ...
- photoshop正确的打开方式
首先这边我先贴一个地址:https://www.adobe.com/cn/products/photoshop.html 安装软件,这里就不赘述了,真的不会,可以百度^_^我当初就是百度的,哈哈 说到 ...
- 应用中弹出 WiFi 提示框的方法
如果 iOS 程序中用到了 WiFi,想有 WiFi 提示,只需要在 .plist 文件中加入如下 Key/Value 即可: 键名:ApplicationusesWi-Fi 值:YES 键名:SBU ...
- VelocityTracker监控速度!!!
用来追踪触摸事件(flinging事件和其他手势事件)的速率.用obtain()函数来获得类的实例,用addMovement(MotionEvent)函数将motion event加入到Velocit ...
- LeetCode86 Partition List
题目: Given a linked list and a value x, partition it such that all nodes less than x come before node ...
- ELK之开心小爬爬
1.开心小爬爬 在爬取之前需要先安装requests模块和BeautifulSoup这两个模块 ''' https://www.autohome.com.cn/all/ 爬取图片和链接 写入数据库里边 ...
- MaxCompute Studio使用心得系列7——作业对比
在数据开发过程中,我们通常需要将两个作业进行对比从而定位作业运行性能或者结果有差异的问题,但是对比作业时需要同时打开两个studio 的tab页,或者两个Logview页,不停切换进行对比,使用起来非 ...
- install tushare in python 3.6
install tushare (D:\Anaconda3) C:\Users\Administrator>pip install tushare Collecting tushare Down ...