day12——生成器、推导式、简单内置函数
day12
生成器
迭代器:python中内置的一种节省空间的工具
生成器的本质就是一个迭代器
迭代器和生成器的区别:一个是pyhton自带的,一个是程序员自己写的
写一个生成器
基于函数
在函数中将return改写成yield就是一个生成器
函数名()就是产生一个生成器
return 可以写多个,但是只执行一个
yield也可以写多个,还可以返回多次
一个__next__()对应一个yield
next() == next():推荐使用next()
iter() == iter()
yield 也是返回,会记录执行位置
生成器可以使用for循环获取
yield from——将可迭代对象元素逐一返回
在函数的内部 yield 能将for循环和while循环进行临时暂停
优点:节省空间——惰性机制
不能逆行
一次性
一个next对应一个yield
def func():
print(123)
return '你好'
func()
---------------------------------
def func():
if 3>2:
yield '你好'
if 4>2:
yield '我好'
yield '大家好'
g = func() # 产生一个生成器
print(next(g))
print(next(g))
print(next(g))
for i in g:
print(1)
while True:
try:
print(g.__next__())
except StopIteration:
break
---------------------------------
def foo():
for i in range(10):
pass
yield i
count = 1
while True:
yield count
count += 1
g = foo()
# print(next(g)) # 推荐使用
# print(next(g))
# print(next(g))
# print(next(g))
# print(next(g))
# for i in g:
# print(i)
坑 —— 会产生新的生成器
print(next(foo()))
print(next(foo()))
send()
# def gen(name):
# print(f'{name} ready to eat')
# while 1:
# food = yield
# print(f'{name} start to eat {food}')
------------------------------------------------------
# dog = gen('alex')
# next(dog)
# next(dog)
# next(dog)
------------------------------------------------------
# def gen(name):
# # print(f'{name} ready to eat')
# while 1:
# food = yield 222
# print(f'{name} start to eat {food}')
# dog = gen('alex')
# next(dog) # 第一次必须用next让指针停留在第一个yield后面
# 与next一样,可以获取到yield的值
# ret = dog.send('骨头')
# print(ret)
------------------------------------------------------
# def gen(name):
# print(f'{name} ready to eat')
# while 1:
# food = yield
# print(f'{name} start to eat {food}')
------------------------------------------------------
# dog = gen('alex')
# next(dog)
# # 还可以给上一个yield发送值
# # next(dog)
# dog.send('骨头')
# dog.send('狗粮')
# dog.send('香肠')
生成器应用场景
def func():
lst = []
for i in range(10000):
lst.append(i)
return lst
print(func())
---------------------------------
def func():
for i in range(10000):
yield i
g = func()
for i in range(50):
print(next(g))
---------------------------------
def func():
lst = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]
for i in lst:
yield i
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
---------------------------------
def func():
lst = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]
lst2 = ["小浣熊","老干爹","亲嘴烧","麻辣烫","黄焖鸡","井盖"]
yield from lst1
yield from lst2
g = func()
print(next(g))
print(next(g))
print(next(g))
# for i in g:
# print(i)
推导式
列表推导式:
循环推导式:[变量(加工后的变量) for循环]
筛选推导式:[变量(加工后的变量) for循环 加工条件]
# lst = []
# for i in range(20):
# lst.append(i)
# print(lst)
# list推导式
# print([i for i in range(20)])
------------------------------------------------------
# 循环模式
# [变量 for i in range(20)]
# print([i+1 for i in range(10)])
------------------------------------------------------
# 筛选模式
# lst = []
# for i in range(20):
# if i % 2 == 0:
# lst.append(i)
# print(lst)
# print([i for i in range(20) if i % 2 == 0])
# [变量(加工后的变量) for循环 加工方式]
# print([i for i in range(50) if i % 2 == 1])
# print([i for i in range(1,50,2)])
------------------------------------------------------
list二层嵌套for:
# print([i for i in range(20) for n in range(10)])
lst = []
for i in range(20):
for n in range(10):
lst.append(i)
print(lst)
生成器推导式:
循环推导式:(变量(加工后的变量) for循环)
筛选推导式:(变量(加工后的变量) for循环 加工条件)
# 循环模式:
# g = (i for i in range(20))
# print(next(g))
# print(next(g))
# print(next(g))
# print(list((i for i in range(20))))
------------------------------------------------------
# 筛选模式
# g = (i for i in range(50) if i % 2 == 1)
# for i in g:
# print(i)
------------------------------------------------------
二层for嵌套:
g = (i for i in range(20) for n in range(10))
for i in g:
print(i)
集合推导式:set()
{键:值 for循环 加工条件}
# 集合推导式:(了解)
# print({i for i in range(10)})
# print({i for i in range(10) if i % 2 == 0})
------------------------------------------------------
二层for嵌套:(去重)
print({i*n for i in range(20) for n in range(10)})
print(len({i*n for i in range(20) for n in range(10)}))
字典推导式:{}
{变量(加工后的变量) for循环 加工条件}
# 字典推导式:(了解)
# print({i:i+1 for i in range(10)})
# print({i:i+1 for i in range(10) if i % 2 == 0})
# {键:值 for循环 加工条件}
------------------------------------------------------
二层for嵌套:
print({i:n for i in range(20) for n in range(10,20)})
dic = {}
for i in range(20):
for n in range(20):
dic[i] = n
print(dic)
内置函数一
eval():字符串里面的计算公式得出答案
exec() :字符串里面的代码得出答案
工作和学习不能用
hash() :判断是不是不可变数据类型
help() :得到源码
callable() :判断是不是可调用
int()
float():转化为浮点数
complex():复数
bin() :转化为二进制
oct():转化为八进制
hex():转化为十六进制
divmod(5,2):(2,1)商2余1
round():五舍六入,奇变偶不变,默认是整数,可以指定保留几位
pow(2,3):幂
bytes(s,encoding='utf-8'):转化为字节
ord():当前编码 求ascii码位
chr():用码位求内容
repr():原型毕露
all():判断元素是否都为真
any():判断元素是否有真
globals():查看全局空间中的变量
locals():查看当前空间中的变量,有就打印字典,没有就打印空字典
# s = """
# for i in range(10):
# print(i)
# """
------------------------------------------------------
# s1 = """
# def func():
# print(123)
# func()
# """
# print(eval(s))
# print(exec(s1)) # 牛逼 不能用
------------------------------------------------------
# print(hash("asdfas"))
------------------------------------------------------
# print(help(list))
# help(dict)
------------------------------------------------------
# def func():
# pass
# print(callable(func)) # 查看是否可调用
------------------------------------------------------
# print(float(2)) # 浮点数
# print(complex(56)) # 复数
------------------------------------------------------
# print(oct(15)) # 八进制
# print(hex(15)) # 十六进制
------------------------------------------------------
# print(divmod(5,2)) # (2, 1) 2商 1余
------------------------------------------------------
# print(round(5.3234,2)) # 四舍五入 -- 默认是整数,可以指定保留小数位
------------------------------------------------------
# print(pow(2,3)) # 幂
# print(pow(2,3,4)) # 幂,余
------------------------------------------------------
# s = "alex"
# print(bytes(s,encoding="utf-8"))
------------------------------------------------------
# print(ord("你")) # 当前编码
# print(chr(20320))
------------------------------------------------------
# s = "C:\u3000"
# print(repr(s))
------------------------------------------------------
# print("\u3000你好")
------------------------------------------------------
# lst = [1,2,3,False,4,5,6,7]
# print(all(lst)) # 判断元素是否都为真 相似and
# print(any(lst)) # 判断元素是否有真 相似or
------------------------------------------------------
# name = 1
# def func():
# a = 123
# # print(locals())
# # print(globals())
# func()
------------------------------------------------------
# print(globals()) # 全局空间中的变量
# print(locals()) # 查看当前空间的变量
day12——生成器、推导式、简单内置函数的更多相关文章
- python27期day12:推导式、内置函数、高阶函数、匿名函数、作业题
1.推导式:做一些有规律的数据结构 列表推导式: 普通循环模式: [加工后的变量 for 循环] 示例一:print([i for i in range(1,51)]) 结果:[1, 2, 3, 4, ...
- day5--装饰器函数的信息打印,迭代器,生成器,列表推导式,内置函数
本文档主要内容: 一 装饰器函数的信息打印 二 迭代器 三 生成器 四 生成器表达式和列表推导式 五 内置函数 一 装饰器函数的信息打印 一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印 ...
- python函数知识五 推导式和内置函数一(了解)
17.推导式: 推导式:将for循环多行变成一行 list推导式:[] #普通模式 print([i for i in range(20)]) #循环模式 #[变量 for i in range(20 ...
- Day 14 三元运算符,列表推导式,内置函数
三目运算符 ```python# 三目(元)运算符:就是 if...else...语法糖# 前提:简化if...else...结构,且两个分支有且只有一条语句# 注:三元运算符的结果不一定要与条件直接 ...
- 记录我的 python 学习历程-Day12 生成器/推导式/内置函数Ⅰ
一.生成器 初识生成器 生成器的本质就是迭代器,在python社区中,大多数时候都把迭代器和生成器是做同一个概念. 唯一的不同就是: 迭代器都是Python给你提供的已经写好的工具或者通过数据转化得来 ...
- python第十二天 生成器,迭代器,内置函数
第二模块学习: 生成器,迭代器,内置函数 生成器特点:只有在调用时才会生成相应的数据,运行的速度快! 示例: def fil(max):#斐波那契数 n,a,b=0,0,1 #定义初始数据 whil ...
- day11 - 15(装饰器、生成器、迭代器、内置函数、推导式)
day11:装饰器(装饰器形成.装饰器作用.@语法糖.原则.固定模式) 装饰器形成:最简单的.有返回值的.有一个参数的.万能参数 函数起的作用:装饰器用于在已经完成的函数前后增加功能 语法糖:使代码变 ...
- Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- Day 22 生成器yield表达式及内置函数(一丢丢)
本日知识点: ################################### #一.上节课复习:在for循环式,调用对象内部的__iter__方法, # 把他们变成了可迭代对象然后for循环调 ...
随机推荐
- kuma kong 团队开发的可视化&&安全的service mesh
最近service mesh 的开源产品是越来越多了,好多团队都开源了自己的解决方案 maesh 最近kong 团队也开源了自己的service meshkuma 一张参考图 说明 kuma 没有基于 ...
- benchmarkdotnet docker 运行
使用docker 运行基准测试是一个不错的选择,可以减少我们环境搭建的时间,同时也可以加速ci/cd 环境准备 docker-compose 文件 version: "3" ser ...
- rundeck配置salt-api
Rundeck 安装: 系统: # cat /etc/issue CentOS release 6.7 (Final) 内核: # uname -r -.el6.x86_64 IP 地址: 172.1 ...
- Zookeeper的缺点
工作中对Zookeeper都是间接比较浅的使用,性能也没太高的要求所以对它的缺点也没太深的认识,从网上评价看,它还是有不少问题的. 1. 原生客户端坑太多,Curator(Curator是Netfli ...
- loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点
loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...
- 浅谈LCA
目录 什么是LCA 倍增求LCA dfs bfs 树剖求LCA 什么是LCA LCA就是最近公共祖先 对于有根树\(Tree\)的两个结点\(u.v\),最近公共祖先\(LCA(T,u,v)\)表示一 ...
- Sublime Text 3关闭自动升级提醒
由于种种原因,导致不想升级现有版本的ST3,但是被它的升级提醒弹窗严重骚扰! ||||||||||| 解 决 办 法 ||||||||||| 1.首选项 - 设置 - 用户(快捷键 ❀,)打开“Pre ...
- [SDOI2011]染色(信息学奥赛一本通 1563)(洛谷 2486)
Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“ ...
- starUML
下载地址: https://www.qqxiazai.com/down/10296.html 下载后解压,先运行 绿化.exe 然后右键管理员运行 StarUML.exe 进入后就可以画UML以及时序 ...
- sysmain服务怎么启动 & Win7 SuperFetch无法启动
在控制面板/管理工具/服务中,只需找到Superfetch这个服务,双击,然后将其启动类型改为自动,并点击启动按钮并确定即可. Superfetch无法启动,系统找不到指定档案 ms-windows ...