python生成器和推导式

一.生成器
什么是生成器.生成器实质就是迭代器.
在python中有三种方式来获取生成器:
1.通过生成器函数
2.通过各种推导式来实现生成器
3.通过数据的装换也可以获取生成器
def func():
print("111")
return 222
ret = func()
print(ret)
结果:111
222

将函数中的return换成yield就是生成器
def func()
print(“111”)
yield 222
ret = func()
pritn(ret)

结果:<generator object func at 0x000000000219A390>
运行的结果和上面的不一样。由于函数中存在了yield。这个函数就是一个生成器函数
当我们在执行这个函数的时候,就不再是函数的执行的,而是获取这个生成器。

# def func():
# print("111")
# yield 222
# gener = func() #这个时候函数不会执行,而是获取生成器.
# ret = gener.__next__() #这个时候函数才会执行.yield和retunr的作用一样都是返回函数
# print(ret)
# 结果:
# 111
# 222

#yield和return的区别:yield是分段执行一个函数.return直接停止执行函数
# def func():
# print("111")
# yield 222
# print("333")
# yield 444
# gener = func()
# ret = gener.__next__()
# print(ret)
# ret2 = gener.__next__()
# print(ret2)
# 结果:
# 111
# 222
# 333
# 444

当程序运行完最后一个yield,后面继续进行--next--()程序会报错

生成器的应用:
# def cloth():
# lst = []
# for i in range(0,10000):
# lst.append("衣服"+str(i))
# return lst
# cl = cloth()
# print(cl) #一次把衣服全部提取出来 ,特别占内存

# def cloth():
# for i in range(0,1000):
# yield "衣服"+str(i)
# cl = cloth()
# print(cl.__next__()) #衣服0
# print(cl.__next__()) #衣服1
#区别:第一种是直接一次性全部拿出来.会很占用内存,第二种使用生成器,一次就一个
#用多少生成多少.生成器是一个一个的指向下一个.不会回去,__next__到哪,指针就指到哪里。

def eat():
print("吃什么")
a = yield "馒头"
print("a=",a)
b = yield "大饼"
print("b=",b)
c = yield "韭菜盒子"
print("c=",c)
yield "game"
gen = eat() #获取生成器
ret1 = gen.__next__()
print(ret1)
ret2 = gen.send("胡辣汤")
print(ret2)
ret3 =gen.send("狗粮")
#打印结果:
# 吃什么
# 馒头
# a= 胡辣汤
# 大饼
# b= 狗粮
#send()和__next__()区别:
#1.send和next()都是让生长器向下走一次
#2.send可以给上一个yield的位置传递值,不能给最后一个yield发送值
# 在第一次执行生成器时候不能使用send()

#生成器可以使用for循环来获取内部的元素:
def func():
print(111)
yield 222
print(333)
yield 444
print(555)
yield 666
gen = func()
for i in gen:
print(i)
#结果:
# 222
# 333
# 444
# 555
# 666

#二.列表推导式,生成器表达式
# lst = []
# for i in range(1,15):
# lst.append(i)
# print(lst) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
#替换成列表推导式:
lst = [i for i in range(1,15)]
print(lst) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
#列表推导式是通过一行来构建列表

字典的推倒式:

# lis1 = ["tabai","wusir"]
# lis2 = ["henbai","hense"]
# dic = {lis1[i]:lis2[i] for i in range(len(lis1))}
# print(dic) # {‘tabai‘: ‘henbai‘, ‘wusir‘: ‘hense‘}

集合推导式:
lst = ["马化腾", "马化腾", "王建忠", "张建忠", "张建忠", "张雪峰", "张雪峰"]

s = {i for i in lst} # 集合推倒式
print(s)

原文地址:https://www.cnblogs.com/caodneg7/p/9332662.html

时间: 2024-10-08 01:10:10

python生成器和推导式的相关文章

Python 生成器和推导式

一.Python生成器和生成器函数1.生成器和生成器函数的概念    1.生成器的本质是迭代器    2.函数中包含yield,就是生成器函数 2.生成器函数的写法    def func():        a =10        yield 20    gen = func()  #没有执行,而是生成一个生成器    普通函数和生成器函数的不同    1.普通函数名()表示函数的的执行    2.生成器函数名()不是函数的执行,而是生成一个生成器 yield和return的不同    1.

python 【迭代器 生成器 列表推导式】

python [迭代器  生成器  列表推导式] 一.迭代器 1.迭代器如何从列表.字典中取值的 index索引 ,key for循环凡是可以使用for循环取值的都是可迭代的可迭代协议 :内部含有__iter__方法的都是可迭代的迭代器协议 :内部含有__iter__方法和__next__方法的都是迭代器 print(dir([1,2,3])) lst_iter = [1,2,3].__iter__() print(lst_iter.__next__()) print(lst_iter.__ne

函数生成器、推导式及python内置函数

函数生成器.推导式及python内置函数 函数生成器 生成器的定义 在 Python 中,使用了 yield 的函数被称为生成器(generator). 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器. 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行. 调用一个生成器函数,返回的是一个迭代器对象. 生成器与迭代器的区别 生成

python 3列表推导式的的一点理解!

Python的列表推导式对于新手来说一般都难以理解,简单看个例子: [x * x for x in range(1,100)] 上面是一个很简单的列表推导式,我的理解方式是从右往左看. 一点一点来看吧,我们先用range(1,100)生成一个迭代器对象(1-99的列表),然后再迭代这个列表的每一个对象,然后让每个对象执行一次平方操作,最后生成一个列表. -----------------------------分割线----------------------------------------

Python的列表推导式

1.列表推导式书写形式: [表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件] 2.举例说明: #!/usr/bin/python # -*- coding: utf-8 -*- li = [1,2,3,4,5,6,7,8,9] print [x**2 for x in li] print [x**2 for x in li if x>5] print dict([(x,x*10) for x in li]) print [ (x, y) for

Python之函数(七)生成器与推导式

4.10 生成器 简介: 什么是生成器? 生成器的本质就是迭代器 生成器跟迭代器的区别:迭代器都是python给你提供已经写好的工具或者数据转换而来的,生成器需要我们自己用python代码构建的工具 生成器的构建方式 通过生成器函数 def func(): print(11) return 22 ret=func() print(ret) #结果为:11 22 #将函数中的return换成yield,这样func就不是函数了,而是一个生成函数 def func(): print(11) yiel

python的各种推导式(列表推导式、字典推导式、集合推导式)

推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(list)推导式 字典(dict)推导式 集合(set)推导式 一.列表推导式 1.使用[]生成list 基本格式 variable = [out_exp_res for out_exp in input_list if out_exp == 2] out_exp_res: 列表生成元素表达式,可以是有返

Python---迭代器,生成器,列表推导式

# 02,迭代器# 可迭代对象:内部含有__iter__# 迭代器:可迭代对象.__iter__()# 迭代器:内部含有__iter__且__next__# 判断 __iter__ 在不在dir(对象中)# isinstance()# 节省内存.# 惰性机制.# 单向不可逆.# for循环的机制:# while# pass# 可迭代对象# 迭代器# 两者区别# 模拟for循环机制## 03,生成器# 本质上是迭代器,用python代码构建的.# 生成器定义# 生成器的写法# yield# sen

Python -- 函数之推导式

5.12 推导式 l = [] for i in range(1,11): l.append(i) print(l) # 用列表推导式 (一行搞定) l = [i for i in range(1,11)] print(l) 列表推导式可分为两种模式: 循环模式: [变量(加工的变量) for 变量 in iterable(可迭代对象)] 筛选模式: [变量(加工的变量) for 变量 in iterable(可迭代对象) if 条件] # 循环模式 1. 将10以内所有整数的平方写入列表. l