一、生成器

1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器。

1.2 生成器函数

def func1(x):
x +=
print()
yield x
print()
yield 'alex'
g_obj = func1() # 生成器函数对象
print(g_obj) # <generator object func1 at 0x000002760D700BA0>
print(g_obj.__next__())
print(g_obj.__next__())

注意:

(1)一个next对应一个yield

(2)yield 降值返回给 生成器对象.__next__()返回值。

1.2.1 yield 与 return 的区别

(1)return 结束函数,给函数的执行者返回值

(2)yield 不会结束函数,一个next对应一个yield,给生成器对象.__next__()

1.3  迭代器VS生成器

区别1:自定制的区别
迭代器
l1= [,,,]
l1.__iter__()

生成器

def func1(x):
x +=
yield x
x +=
yield x
x +=
yield x
g1 = func1()
for i in range():
print(g1.__next__())

区别2:内存级别的区别

(1)迭代器是需要可迭代对象进行转化。可迭代对象非常占内存。

(2)生成器直接创建,不需要转化,从本质就节省内存。

def func1():
for i in range(,):
yield i
g1 = func1()
for i in range():
print(g1.__next__())

1.4  send 与 next的区别

(1)send 与 next 一样,也是对生成器取值(执行一个yield)的方法。

(2)send 可以给上一个yield传值。

(3)第一个取值永远都是next。

(4)最后一个yield永远也得不到send传的值。

def func1():
print(111)
count = yield 6 # 返回值用count去接受
print(count)
print(222)
yield 7
print(333)
yield 8
g = func1()
print(next(g))
print(g.send('alex'))
# print(next(g))
print(next(g)) 结果为:

      111
      6
      alex
      222
      7
      333
      8

  

      

1.5 生成器的应用

第一种:
def cloth(n):
for i in range(,n+):
print('衣服%s'%i)
cloth() 第二种:
def cloth(n):
for i in range(,n+):
yield '衣服%s'%i
g = cloth()
for i in range():
print(g.__next__())
for i in range():
print(g.__next__())

二、列表的推导式

2.1 利用for循环写1-100的列表

l1 = []
for i in range(,):
l1.append(i)
print(l1)

2.2 利用列表推导式:一行列表搞定你需要的任何列表。

l1 = [i for i in range(,)]
print(l1)

2.2.1 循环模式 [变量(加工后的变量) for 变量 in iterable(可迭代对象)]

l2 = ['python%s期' % i for i in range(, )]
print(l2)
l3 = [i** for i in range(,)]
print(l3)

2.2.2  筛选模式:[变量(加工后的变量)for 变量 in iterable if 条件]

l4 = [i for i in range(,) if i %  == ]
print(l4)
# 加工后的变量
l5 = [i** for i in range(,) if i % == ]
print(l5)

# 双层循环
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
l1 = [j for i in names for j in i if j.count('e') == ]
print(l1)

2.3  列表推导式的优缺点

(1)优点:一行解决,方便

(2)缺点:容易着迷,不易排错,不能超过三次循环。

(3)列表推导式不能解决所有列表的问题,所以不要太刻意用。

三、生成器表达式:将列表推导式的  [ ]  换成()即可

g = (i for i in range())
print(g) # 生成器函数对象 <generator object <genexpr> at 0x000001B44A1C0BA0>
for i in range():
print(g.__next__())

四、字典键值对互换

mcase = {'a':,'b':}
mcase_frequency = {mcase[k]: k for k in mcase}
print(mcase_frequency)

五、集合推导式

squared = {x** for x in [,-,]}
print(squared)

python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式的更多相关文章

  1. python基础2--数据结构(列表List、元组Tuple、字典Dict)

    1.Print函数中文编码问题 print中的编码:# -*- coding: utf-8 -*- 注:此处的#代表的是配置信息 print中的换行符,与C语言相同,为"\n" 2 ...

  2. python基础学习笔记——生成器与推导式

    生成器 首先我们来看看什么是个生成器,生成器本质就是迭代器 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 首先,我们先 ...

  3. Day2 Python基础学习——字符串、列表、元组、字典、集合

    Python中文学习大本营:http://www.pythondoc.com/ 一.字符串操作 一.用途:名字,性格,地址 name = 'wzs' #name = str('wzs')print(i ...

  4. 【Python基础学习五】列表,元祖,字典

    1.列表(list) 列表是Python的一种内置数据类型,list是一种有序的集合,可以随时添加和删除其中的元素,就像动态数组一样.获取list中的元素用角标获取,角标可以使用正角标,也可以使用负角 ...

  5. Python基础(4)列表、元组、字符串、字典、集合、文件操作

    列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 详见:http://www.cnblogs.com/alex3714/articles/5717620.html 1.列表和元 ...

  6. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  7. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  8. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  9. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

随机推荐

  1. SVN上拖下来的项目,缺少build path怎么办?

    在eclipse里用subeclipe从svn上拖下来的项目,看不见java build path怎么办? 原因那是因为你的两个配置文件:.project .classpath没有内容或者缺失. 重新 ...

  2. [Unity动画]05.Entry & Exit & Any State

    0.状态机如下: Any State->Dying:isDying为true Dying->Reviving:isDying为false Reviving->Exit:isDying ...

  3. pc

  4. 10.纯 CSS 创作一个同心圆弧旋转 loader 特效

    原文地址:https://segmentfault.com/a/1190000014682999 想到了扇形:正方形 ->border-radius: 50%; ->取四份中的任意一份. ...

  5. Centos配置jdk和tomcat环境

    centos java+tomcat环境配置 一.安装java环境 在CentOS7.2上安装jdk1.8(tar.gz安装包),并配置环境变量 jdk安装在/home/soft/jdk1.8.0-1 ...

  6. Python学习笔记_week1

    一.编程语言的分类 编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言,Python是一门动态解释型的强类型定义语言. Python的优缺点 Python解释器:CPython.IPy ...

  7. bar

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  8. JAVA SpringBoot2 整合 JSP视图模板 整合 Ueditor富文本编辑器

    一般涉及到后台管理系统,就少不了富文本编辑器,这个可以图,文,视频混排的高级工具,笔者通过对比,发现目前市场上最好的三方库还当属百度的 ueditor 近年来 SpringBoot 框架可谓越来越火, ...

  9. 正则前面的 (?i) (?s) (?m) (?is) (?im)

    (?i) 表示所在位置右侧的表达式开启忽略大小写模式(?s) 表示所在位置右侧的表达式开启单行模式(?m) 表示所在位置右侧的表示式开启指定多行模式(?is) 更改句点字符 (.) 的含义,以使它与每 ...

  10. XML报错:The reference to entity "characterEncoding" must end with the ';' delimite

    解决方法: 在web.xml增加如下配置: <filter>  <filter-name>encodingFilter</filter-name>  <fil ...