Python全栈day18(三元运算,列表解析,生成器表达式)

一,什么是生成器

  可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己内置的__iter__方法),所以生成器是可迭代对象。

二,生成器分类在python中的表现形式

  1,生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数状态,以便下次从它离开的地方继续执行day18-5.py

def test():
    yield 1
    yield 2

g=test()
print(g)
print(g.__next__())
print(g.__next__())

<generator object test at 0x000001D40CF6F3B8>
1
2

  不同于return可以yield多个值,因为是可迭代对象所以有next方法

  2,生成器表达式:类似于列表推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

  

三,三元表达式,如果表达式成立返回前面的值否则返回后面的值day18-7.py

name=‘zhangsan‘
print(‘SB‘ if name == ‘zhangsan‘ else ‘帅哥‘)

  

四,列表表达式,举例说明 day18-8.py

#使用for循环实现生鸡蛋
egg_list=[]
for i in range(10):
    egg_list.append(‘鸡蛋%s‘ %i)

print(egg_list)

#使用列表表达式生鸡蛋
l=[‘鸡蛋%s‘%i for i in range(10) ]
print(l)

[‘鸡蛋0‘, ‘鸡蛋1‘, ‘鸡蛋2‘, ‘鸡蛋3‘, ‘鸡蛋4‘, ‘鸡蛋5‘, ‘鸡蛋6‘, ‘鸡蛋7‘, ‘鸡蛋8‘, ‘鸡蛋9‘]
[‘鸡蛋0‘, ‘鸡蛋1‘, ‘鸡蛋2‘, ‘鸡蛋3‘, ‘鸡蛋4‘, ‘鸡蛋5‘, ‘鸡蛋6‘, ‘鸡蛋7‘, ‘鸡蛋8‘, ‘鸡蛋9‘]

  使用for循环和列表表达式生成是结果是一样的

  使用三元表达式加一个if判断条件(三元表达式可以是三元也可以是二元,但是不能是四元)

l=[‘鸡蛋%s‘%i for i in range(10) if i>5]
print(l)

[‘鸡蛋6‘, ‘鸡蛋7‘, ‘鸡蛋8‘, ‘鸡蛋9‘]

  以上使用表达式生成的列表直接在内存中,可以使用生成器表达式

egg_list=[‘鸡蛋%s‘%i for i in range(10)]
laomuji=(‘鸡蛋%s‘%i for i in range(10))
print(laomuji)
print(next(laomuji))    #next的本质就是调用__next__
print(laomuji.__next__())
print(next(laomuji))

<generator object <genexpr> at 0x000001D39C97F3B8>
鸡蛋0
鸡蛋1
鸡蛋2

  PS:不能无限制的next因为定义生成器的时候定义了范围0-9所以最多到鸡蛋9

  总结:

  1,把列表解析的[]换成()得到的就是生成器表达式

  2,列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

  3,Python不但所以迭代器协议让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。例如,sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接作用计算一系列值的和

print(sum(x ** 2 for x in range(4)))

14

  

原文地址:https://www.cnblogs.com/minseo/p/8289223.html

时间: 2024-10-05 04:44:51

Python全栈day18(三元运算,列表解析,生成器表达式)的相关文章

190329迭代器-生成器-三元运算-列表解析

一.迭代器 迭代器协议:对象必须提供一个next()方法,执行该方法要么返回迭代中的下一项,要么抛出一个Stoplteration异常终止迭代 可迭代对象:遵循迭代器协议,即可迭代对象,(可以被for循环的就是可迭代对象) l = {1,2,3} iter_l = l.__iter__() #将列表转换为迭代器 print(iter_l.__next__()) print(next(iter_l)) 二.生成器 1.生成器函数 def f(): for i in range(10): yield

Python__三元表达式+列表解析+生成器表达式

x = 10res = 'ok' if x > 3 else 'no'print(res)#列表解析l = ['egg%s'%i for i in range(10)]print(l)l = ['egg%s'%i for i in range(10) if i > 5]print(l)names = ['alex_sb','egon','wupeiqi_sb','yuanhao_sb']names_new = [name for name in names if name.endswith('

Python全栈day18(迭代器协议和for循环工作机制)

一,什么是迭代和递归 递归和迭代都是循环的一种. 简单地说,递归是重复调用函数自身实现循环.迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值. 二,什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__i

python全栈_009_Python3基本数据类型--列表

1:列表的介绍 列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 比如C++中的数组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开,而且可以存放各种数据类型,列表是可变数据类型(即可以改变列表内存中的值) lst = [1, 2, 3, 4] print(lst, id(lst)) lst = [1, 2, 3, 4] # 重新创建一个列表 print(lst, id(lst)) lst[0] = 'Hello' #修改第一个元素的值,修改之后

Python全栈之路----数据结构—列表

1.列表是一个数据的集合,集合内可以放任何数据类型,可对集合进行方便的增删改查操作.列表里面的数可以重复. L1 = [ ] #定义空列表 L2 = [ 'a' , 'b' , 'c' , 'd' ] #存四个值,索引为0-3 L3 = [ 'abc' , [ 'def' , 'ghi' ] ] #嵌套列表 2.列表的功能: 创建,查询( L[n]索引值为n的元素:L.count(n)查找有多少个元素为n:L.index(n)查找元素为n的索引值),切片,增加(L.append(n)在最后加入为

Python随心记--三元运算

sum(list[range(40)]) #速度比下面的慢 sum(x ** 2 for i in xrange(4)) name = 'pang' res = 'is' if name == 'pang' else 'chun' print(res) 三元运算列表解析 l = [i for i in range(10)] l = [i for i in range(10) if i > 5] print(l) l = (i for i in range(10)) #生成器表达式 print(l

Python 全栈开发:python列表List

列表 列表是python中经常使用的数据类型,用于存放多个值. 表现形式:在[ ]内用逗号分隔,可以存放n个任意类型的值 eg: #单一类型 users=['yangli','yite','fixd'] #多类型,列表嵌套 users=['room01',['yangli',20,'音乐'],['yite',20,'篮球'],] 列表常用方法 和 函数 方法 函数 常用的操作 eg: len(list) #len(list) 计算列表的长度 ls = ['a','b','c','d'] leng

Python全栈考试-部分试题(精选)

Python全栈考试(一) Python全栈考试(一) 1.执行 Python 脚本的两种方式 答:1.>>python ../pyhton.py 2. >>python.py   #必须在首行有 #!/usr/bin/env python3 指定执行语言 2.简述位.字节的关系 答:一个字节(byte)=8位(bit)  位为最小的单位 3.简述 ascii.unicode.utf-8.gbk 的关系 ascii:只能表示256个符号 unicode:万国码,各国都有 需要有2位

Python全栈开发【第一篇】:初识Python

Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与while循环练习题 基本数据类型前引 Python 的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton Python的Java实现,Jython会将Pyth