12生成器,send,推导式
# 1.生成器的本质就是迭代器
# 2.通过函数变成一个生成器
# def func(): # print(1) # yield 5 # 我的函数走到这了 # print(2) # yield 9 # 我的函数走到这了 # # g = func() # 生成一个生成器 # print(g.__next__()) # print(g.__next__()) # print(list(range(10000))) # def func(): # print(1) # # return 5 # yield 5 # print(func().__next__()) # 这样生成一个生成器 # print(func().__next__()) # 这样生成一个生成器 # print(func().__next__()) # 这样生成一个生成器 # print(func().__next__()) # 这样生成一个生成器
# 函数体存的是代码
# 1.语法分析
# 2.语义分析
# 3.词法分析
# python2 next() iter()
# python3 next() __next__() iter() __iter__()
# 大批量的数据的时候首先要想到生成器
# def func(): # print(1) # yield 5 # 我的函数走到这了 # print(2) # yield 9 # 我的函数走到这了 # # g = func() # 生成一个生成器 # print(g.__next__()) # print(g.__next__())
# 碰到return就结束函数 # 碰到yield不结束就挂起 # 生成器的好处,非常节省内存
# def func():
# print(1)
# a = yield 2 # 1.挂起 2.返回值 3.接受值
# print(a) # '123'
# print(3)
# b = yield 4
# print(b) #'234'
# c = yield 9
#
# g = func()
#
# print(g.__next__()) #1 2 g.send(None)
# print(g.send('123')) # send = next+传值
# print(g.send('234')) # send = next+传值
# # 第一次调用生成器的时候使用send里边的值必须是None
# print(g.send('123')) # send = next+传值 # print(g.send('234')) # send = next+传值 # # 第一次调用生成器的时候使用send里边的值必须是None
# def func():
# yield 1
# yield 2
#
# g = func()
# ret = g.__next__()
# print(ret+4)
# print(g.__next__()) # def func():
# li = [1,2,3,4]
# # yield li
# yield from li
#
# ret = func() # 把生成器的地址给了ret
# print('is ret',ret.__next__())
# # 执行ret这个变量的指向的生成器地址
# print('is ret',ret)
# # 在全局空间找到一个变量叫做ret的,打印它的值 值就是生成器的地址
# # 执行ret这个变量的指向的生成器地址 # print('is ret',ret) # # 在全局空间找到一个变量叫做ret的,打印它的值 值就是生成器的地址
# def func(): # li = [1,2,3,4] # l2 = [5,6,7,8] # # yield from li # # yield from l2 # for i in li: # yield i # # for em in l2: # yield em # # ret = func() # 把生成器的地址给了ret # print('is ret',ret.__next__()) # print('is ret',ret.__next__()) # print('is ret',ret.__next__()) # print('is ret',ret.__next__()) # print('is ret',ret.__next__())
# 总结:
# 1.生成器的本质就是一个迭代器
# 2.生成器一定是一个迭代器,迭代器不一定是一个生成器
# 3.生成器是可以让程序员自己定义的一个迭代器 #
4.生成器的好处,节省内存空间 #
5.生成器的特性 一次性的,惰性机制,从上向下 #
6.send相当于 next+传值,第一次触生成器的时候,如果使用send(None) # 值必须是None,一般我建议你们使用__next__ #
7. python2 iter() next() # python3 iter() next() __next__() __iter__() #
8.yield from 将可迭代对象元素逐个返回
# 列表推导式
# 列表推导式
# li = []
# for i in range(10):
# li.append(i)
# print(li) # print([i for i in range(10)])
# [结果 语法] #容器
li = [] # for i in range(10): # if i%2 == 1: # li.append(i) # print(li)
# print([i for i in range(10) if i%2 == 0]) # 过滤(筛选)
# li = [] # for i in range(10): # for em in range(3): # li.append(em) # print(li)
# print([j for i in range(10) for em in range(3) for j in range(5)])
# 集合推导式
# 集合推导式
# s = {i for i in range(10)}
# print(s) # {结果 语法} 容器
# {结果 语法} 容器
# 字典推导式:
# print({i:i+1 for i in range(10)})
# print(type({1,2,32,4}))
# g = (i for i in range(10))
# {'1':1,'2':2} # {'1','2'}
# {1:2,2:3,3:4} # {'美女':1999,1999:2}
# 推导式:\
# 1.列表
# 2.集合
# 3.字典
# 1.生成器推导式
# 1.生成器: # 总结:
# 1.生成器的本质就是一个迭代器
# 2.生成器一定是一个迭代器,迭代器不一定是一个生成器
# 3.生成器是可以让程序员自己定义的一个迭代器
# 4.生成器的好处,节省内存空间
# 5.生成器的特性 一次性的,惰性机制,从上向下
# 6.send相当于 next+传值,第一次触生成器的时候,如果使用send(None) # 值必须是None,一般我建议你们使用__next__ # 7. python2 iter() next() # python3 iter() next() __next__() __iter__()
# 8.yield from 将可迭代对象元素逐个返回
# 2.推导式: # 总结: # 列表 # 集合 {1,2,3} # 字典 {1:2,2:4}
# 看着像元组的其实是一个 生成器推导式
# 1.外部需要容器包一下,里边第一个位置 结果 剩下位置都是语句
# 2.推导式 -- 面试 实现小的需求时可以使用推导式,推导式节省代码
# 3.推导式不要写太长,可读性查.
12生成器,send,推导式的更多相关文章
- python note 12 生成器、推导式
1.生成器函数 # 函数中如果有yield 这个函数就是生成器函数. 生成器函数() 获取的是生成器. 这个时候不执行函数# yield: 相当于return 可以返回数据. 但是yield不会彻底中 ...
- 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
# 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...
- python学习笔记:第12天 列表推导式和生成器
目录 1. 迭代器 2. 推导式 1. 迭代器 什么是生成器呢,其实生成器的本质就是迭代器:在python中有3中方式来获取生成器(这里主要介绍前面2种) 通过生成器函数获取 通过各种推导式来实现生成 ...
- Python【day 12】生成器和推导式
一.生成器和生成器函数1.生成器和生成器函数的概念 1.生成器的本质是迭代器 2.函数中包含yield,就是生成器函数 2.生成器函数的写法 def func(): a =10 yield 20 ge ...
- Python生成器、推导式之前襟后裾
生成器 函数体内有yield选项的就是生成器,生成器的本质是迭代器,由于函数结构和生成器结构类似,可以通过调用来判断是函数还是生成器,如下: def fun(): yield "我是生成器& ...
- python基础(9)-迭代器&生成器函数&生成器进阶&推导式
迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...
- python全栈开发 生成器 :生成器函数,推导式及生成器表达式
python 全栈开发 1.生成器函数 2.推导式 3.生成器表达式 一.生成器函数 1.生成器: 生成器的本质就是迭代器 (1)生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), ...
- python基础学习笔记——生成器与推导式
生成器 首先我们来看看什么是个生成器,生成器本质就是迭代器 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 首先,我们先 ...
- python 生成器函数.推导式.生成器表达式
一.生成器 什么是生成器,生成器的实质就是迭代器 在python中有三种方式来获取生成器: 1.通过生成器函数 2.通过各种推导式来实现生成器 3.通过数据的转换也可以获取生成器 1 def func ...
随机推荐
- 2.解决虚拟机中centos联网的问题
首先:打开虚拟机的编辑菜单,选择“虚拟机网络编辑器” 虚拟机网络编辑器 在虚拟机网络编辑器中选择还原默认设置 接下来开启CentOS7虚拟机 在这里需要注意的是必需以管理员身份来进行设置,所以要用管理 ...
- 用juery的ajax方法调用aspx.cs页面中的webmethod方法
首先在 aspx.cs文件里建一个公开的静态方法,然后加上WebMethod属性. 如: [WebMethod] public static string GetUserName() { //.... ...
- java和数据库中日期类型的常见用法
(1)java中日期类型:Date.Timestamp(2)数据库中:Date.Timestamp(3)字符串和Date之间的格式化转换: SimpleDateFormat类方法: format ...
- Prisma GraphQL 服务器 生产者 "https://www.prisma.io"
Prisma 一个 GraphQL 服务器 生产者 "https://www.prisma.io" , 关注一下
- 023_supervisorctl管理服务注意事项
一. (1)问题 我在线上使用supervisorctl管理服务时遇到程序文件更新了,但是下次supervisorctl执行的时候并没有更新, 原因是supervisor更新后必须重新读取加载文件才行 ...
- 【easy】112.path sum 113.-----------------
求是否有从根到叶的路径,节点和等于某个值. /** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree ...
- python学习之numpy.ewaxis
当多维数组的某一列时返回的是一个行向量 >>> X = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) >> ...
- SpringMVC概述
1. SpringMVC是什么 SpringMVC 是 Spring 框架内置的 MVC 的实现.SpringMVC 就是一个 Spring 内置的 MVC 子框架 Spring 子框架:意味着 Sp ...
- Kubernetes 学习1 k8s架构概述
一.概述 1.意思:舵手,飞行员 2.特点 a.自动装箱,自我修复,水平扩展,服务发现和负载均衡,自动发布和回滚. b.密钥和配置管理,存储编排,批量处理执行. 二.架构术语 1.集群 master( ...
- APP,H5测试要点
APP测试重点 一,运行测试 运行过程中,是否有加载提示: 运行速度是否流畅: 各个模块之间的切换是否正常: 二,更新测试:打开旧版app时,是否有更新提示,且在不同的手机版本上都能更新成功:打开新版 ...