生成器和推导式

def func():print('哈哈哈')yield 1 # return 和 yield 都可以返回数据print('呵呵呵')
gen = func()  # 不会执行你的函数,拿到的是生成器
ret = gen.__next__() # 会执行到下一个yield
print(ret)
gen.__next__() # 继续执行函数到下一个yield
函数中如果有yield 这个函数就是生成器函数,生成器函数() 获取的是生成器,这个时候不执行函数
yield:相当于return,可以返回数据,但是yield不会彻底中断函数,分段执行函数
def order():for i in range(100000):yield '衣服'+ str(i)
g = order() # 获取生成器
mingwei = g.__next__()
print(mingwei)
zhaoyinning = g.__next__()
print(zhaoyinning)

 send() 和 __next__()的区别:

1.send和next都是让生成器向下走一次

2.send可以给上一个yield的位置传递值,不能给最后一个yield发送值,在第一次执行生成器代码的时候不能使用send()

def eat():print("我吃什么啊")a = yield "馒头"print("a=",a)b = yield "大"print("b=",b)c = yield "韭菜盒子"print("c=",c)yield "GAME OVER"
gen = eat() # 获取生成器
ret1 = gen.__next__()
print(ret1) # 馒头
ret2 = gen.send("胡辣汤") # a = 胡辣汤
print(ret2) # 大饼
ret3 = gen.send("狗粮") # b = 狗粮
print(ret3) # 韭菜盒子
ret4 = gen.send("猫粮") # c = 猫粮
print(ret4) # GAME OVER

 

推导式:用一句话生成一个列表

lst = ['python'+str(i) for i in range(1,16)]
print(lst)

语法:[ 结果  for循环  判断]

lst = [i for i in range(100) if i%2 == 1]
print(lst)
# 100 以内能被3整除的数的平方
lst = [i*i for i in range(100) if i%3==0]
print(lst)
# 寻找名字中带有两个e的人的名字
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'],['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
# 不用推导式的方法
lst = []
for line in names:for name in line:if name.count('e') == 2:lst.append(name)
print(lst)#推导式的方法
lst = [name for line in names for name in line if name.count('e') == 2]
print(lst)

字典推导式

语法:{k:v for循环 条件筛选}

#[11,22,33,44] => {0:11,1:22,2:33,3:44}
lst = [11,22,33,44]
dic = {i:lst[i] for i in range(len(lst))}
print(dic)
# 键值对互换
dic = {'jj':'林俊杰','jay':'周杰伦','zs':'赵四','ln':'刘能'}
dic2 = {v:k for k,v in dic.items()}
print(dic2)

集合推导式(可以去重复)

lst = [1,1,4,6,7,4,2,2]

s = {el for el in lst}

print(s)

 

生成器表达式(由于惰性机制)

tu = (i for i in range(10)) # 没有元组推导式,生成器表达式
print(tu) # 生成器
print(tu.__next__())
def func():print(111)yield 222
g = func()
g1 = (i for i in g)
g2 = (i for i in g1)print(list(g)) # [222] 源头,从源头把数据拿走了 
print(list(g1)) # []   这里执行的时候,源头已经没有数据了
print(list(g2)) # []   这里也没有值
def add(a,b):return a + b
# 生成器函数 # 0-3
def test():for j in range(4):yield j
# 0,1,2,3 g
= test() # 获取生成器

# 懒
for n in [1,10,5]:g = (add(n,i) for i in g)
# 到最后往里面放数据就对了
print(list(g)) # [15,16,17,18]
print(list(g)) # []

 

转载于:https://www.cnblogs.com/Little-Raccoon/p/10834696.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是 mmap

1. mmap 基础概念 mmap 即 memory map,也就是内存映射。 mmap 是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后&#xff…

最近项目中遇到的一个算法挑战

在企业信息化进程中,各类智能化运算在不断挑战着我们,最近又遇到一个应用,归纳一下需要实现以下算法 //算法设计 /* *计算是否存在值X1,X2,...,Xm,使等式成立 m*X1(m-1)*X2(m-3)*X3...XmE *如果可解,取解集…

c#利用定时器自动备份数据库(mysql)

1:引用dll MySql.Data.dll, MySqlbackup.dll 2:建一个数据连接静态类 public static class mysql{public static string constr "databasetest;Password密码;user IDroot;serverip地址";public static MySqlConnection conn new MySqlConnection(cons…

构建SAN网络存储

实验目的:构建SAN网络存储 实验环境:redhat 5.4三台,scanstorage作为存储服务,IP地址是:192.168.9.79。node1,node2作为客户端测试 实验步骤: 一、配置服务端: 1、添加一块20G的盘 [rootscans…

netnbsp;与nbsp;javascript脚本的几种交互方法

1.asp.net呼叫jsResponse.Write("<scriptlanguagejavascript>");Response.Write("alert(登峰欢迎您 );" );Response.Write("location.hreflogin.aspx;") ;Response.Write("</script>");在这里情况下,你可以调用页面中的JS…

win10 + 独显 + Anaconda3 + tensorflow_gpu1.13 安装教程(跑bert模型)

这里面有很多坑&#xff0c;最大的坑是发现各方面都装好了结果报错 Loaded runtime CuDNN library: 7.3.1 but source was compiled with: 7.4.1&#xff0c;这是由于最新的tensorflow1.13需要用 Cudnn7.4.1编译。这个问题&#xff0c;StackOverflow上有人问到&#xff0c;但是…

Oracle client 安装、配置

一、安装 链接: https://pan.baidu.com/s/1Yph6hiNkCJsApAzu_Vx2ew 提取码: r9ye 二、配置 1、控制面板\所有控制面板项\管理工具\数据源(ODBC) 注&#xff1a;odbc 分 64 位和 32 位的2、测试 ODBC 连接 Oracle 数据库点击 ODBC&#xff0c;在“用户 DSN”页签下点击添加按钮…

ADO.NET- 基础总结及实例

1、ADO.NET基础介绍 &#xff08;1、程序要和数据库交互要通过ADO.NET进行&#xff0c;通过ADO.NET就能在程序中执行SQL了。ADO.Net中提供了对各种不同数据库的统一操作接口。 (2、直接在项目中内嵌mdf文件的方式使用SQL Server数据库&#xff08;基于服务的数据库&#xff09;…

Android发送短信字数问题

以前已经知道发送短信有70个字符的限制&#xff0c;但真到用的时候才发现还是不了解。中文英文各算几个字符&#xff1f;一开始按照老想法&#xff0c;GB码中文2个字节英文一个 字节来算&#xff0c;按70个汉字的限制可以发140个字节&#xff0c;但是发送的时候总是出错。后来在…

获取指定日期所属年份的第一天日期或最后一天日期

写了2个自定义函数&#xff0c;获取指定日期所在年份的第一天日期或最后一天的日期&#xff1a; SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- Author: Insus.NET -- Create date: 2019-05-09 -- Update date: 2019-05-09 -- Description: 获取指定日期所属年…

高效管理ASP.NET的JavaScript库

简介 对于ASP.NET开发人员来说,管理项目中的JavaScript都很随意&#xff1a; 我想这很大程度上可能是因为网上没有如何妥善处理ASP.NET中JavaScript的可靠信息。此文的目的就是提供一种最佳方案&#xff0c;用于管理ASP.NET中的JavaScript。该方案将能解决以下问题&#xff1a;…

【面试】c++单例模式

1. 单例模式 #include <iostream> using namespace std;class CSingleton { private:CSingleton() {} // 构造是私有的static CSingleton *m_pInstance; public:static CSingleton *GetInstance(){if (m_pInstance NULL) {m_pInstance n…

AIX HACMP集群切换测试实际案例解析

为验证AIX HACMP集群系统的稳定性及保障其上应用的连续性和可靠性&#xff0c;决定周五晚进行集群切换测试。下面是当次过程的文档总结和记录&#xff0c;方便以后参考并备案。系统环境&#xff1a;AIX 5.3数据库&#xff1a; DB2 V8.2存储&#xff1a; IBM DS4700,为两节点配置…

《Effective C++》阅后心得

《Effective C》阅后心得 这本书保存在我电脑里已经有两年之久了&#xff0c;记得以前模模糊糊翻过&#xff0c;大体上还有那么点点印象&#xff0c;最近花了一个星期仔仔细细的看了一篇&#xff0c;收获很大很大 首先对于很多C知识我都有那么个概念&#xff0c;真要我说出什么…

jvm_2

业务线程一直在等待&#xff0c;或者一直在运行&#xff0c;如果不是自己想要的状态&#xff0c;就表明有问题 死锁问题检测 上面程序之所以会死锁&#xff0c;因为下图所示&#xff0c;在-128~127范围内&#xff0c;Integer valueOf后对相同的int值会返回相同的对象&#xff0…

视频播放器

效果图 知识要点 surfaceView.getHolder().setFixedSize(176, 144);//设置分辨率 surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置surfaceview不维护自己的缓冲区&#xff0c;而是等待屏幕的渲染引擎将内容推送到用户面前 sur…

编了一个服务器

//服务器代码 / Sever.cpp : Defines the entry point for the console application. // #include <WinSock2.h> //包含Socket 2版本的头文件&#xff1b; #include <windows.h> #include <stdio.h> #pragma comment(lib, "WS2_32.lib")…

计算机学科技术前沿:互联网上信息可信性的现状

互联网的虚假信息很大一部分是由水军造成的。 研究报告显示&#xff0c;越来越常见的网络付费发贴行为虽然有益于商家&#xff0c;但却会影响到普通互联网用户的信息判断&#xff0c;使他们失去对网络信息的信任。 在中国&#xff0c;这些人被称作“网络水军”&#xff1a;一…

asp.net UpdatePanel的简单用法

局部更新是ajax技术的最基本&#xff0c;也是最重要的用法&#xff0c;今天大概把asp.net ajax中的局部更新控件 updatepanel的用法记录下&#xff0c;大家可以共同探讨 UpdatePanel控制页面的局部更新&#xff0c;这个更新功能依赖于scriptManger控件的EnablePartialRendering…

前端需要了解的http知识

http基本概念 http是一个无状态 &#xff0c;无连接的基于TCP协议的单向应用层协议 一、无连接 无连接即每次链接只处理一个请求&#xff0c;请求和应答后就断开链接 二、无状态 http的每次请求都是独立的&#xff0c;不相关的&#xff0c;协议对事物处理没有记忆功能。 HTTP无…