python 生成器和推导式

python 生成器和推导式

(1)再谈闭包

定义: 在内部函数调用外部函数变量

def outter():
	a=10
	def inner():
		print(a)
outter()()#没用闭包特性
ret=outter()#让一个变量常驻内存,再调用时加快运行速度
ret()#利用了闭包特性
(2)枚举
lst=[1,2,3,4,5,6,7,8,9]
for i in lst:#没有索引直接拿元素
	print(i)
for i in range(len(lst)):#有索引不能直接拿元素
	print(lst(i))
#========枚举===========
for i in enumerate(lst):
	#i此时为元组类型(索引,元素),因此可以进行解构
for index,element in enumerate(lst):
	print(index)#打印索引
	print(element)#打印元素
(3)生成器特点

1.生成器的本质就是迭代器
2.生成器的特点和迭代器一样,取值方式和迭代器一样(next())
3.惰性机制
4.

(4)生成器函数

1: yield相当于return,可以返回数据,但yield不会彻底中断函数,分段执行函数
2: 函数中如果有yield,这个函数就是生成器函数,生成器函数(),此时获取的是生成器,这时不执行函数,
当用__next__(),开始执行,执行到下一个yield之前

def main():#生成器函数收尾一定是yield,否则会报错
	for i in range(1,1000000)
	yield i#return和yield都可以返回数据
print(main())#不会执行你的函数,拿到的是生成器
#此时
func=main()#获取生成器
fun=func.__next__()#执行到下一个yield之前

3: send() 和__next__()是一样的,可以执行到下一个yield,区别是可以给上一个yield位置传值,但
不能给第一个和最后一个yield传值

(5)生成器表达式

1: 没有元组推导式,因为元组不能增删改查

tu=(i for i in range(100) i%2==0)#这是一个生成器表达式,不是元组推导式
print(tu)#生成器
#用法
tu.__next__()#用法一样,由于生成器惰性机制,只有运行一次__next__(),才会返回一个数值
(6)列表推导式

1: 用一句话生成一个列表 lst=[‘字符串’+str(i) for i in range(1,16) if i%2==0],生成字符串1,字符串3…的列表
2: 语法就是[结果 for循环(可以有多个) 判断]各部分空格隔开

#生成一个100以内能被3整除的数的平方
lst=[i*i for i in range(100) i%3==0]
(7)字典推导式

1: 用一句话生成一个字典
2: 语法就是{key:value for循环 条件})各部分空格隔开

#字典的key,value互换
dic={'1':'一','2':'二','3':'三'}
dic={v,k for k,v in dic.items()}
(8)集合推导式

1: 用一句话生成一个集合(去重)
2: 语法就是{结果 for循环 条件})各部分空格隔开

#去重
lst=[1,2,3,4,5,1,23,33,4,5,2]
s={i for i in lst}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值