python中生成器函数_python 生成器函数

从生成器中取值的方法

next

for循环

数据类型的强制转换 缺点:占内存

生成器函数的进阶

send的使用效果

defgenerator():print(123)

content= yield 1

print('=====',content)print(456)yield 2g=generator()

ret= g.__next__()print('***',ret)

ret= g.send('hello')print('***',ret)

123

*** 1

===== hello

456

*** 2

send获取下一个值的效果和next基本一致

只是在获取下一个之的时候,给上一个之的位置传递一个数据

使用send的注意事项

第一次使用生成器的时候,是用next获取下一个值

最后一个yield不能接受外部的值

yield from

defgen1():for c in 'AB':yieldcfor i in range(3):yieldiprint(list(gen1()))defgen2():yield from 'AB'

yield from range(3)print(list(gen2()))

从一个容器中取值,集体返回  可以一个一个接收

列表推导式

g = (i*i for i in range(10))for i ing:print(i)

效果是打印出十以内的每个数的平方

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],

['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]print([name for lst in names for name in lst if name.count('e') >= 2])

['Jefferson', 'Wesley', 'Steven', 'Jennifer']

找到嵌套列表中名字含有两个‘e’的所有名字

生成器表达式

g = [i*i for i in range(30) if i%3==0]print(g)

在列表中打印出能整除三的数的平方

列表推导式和生成器表达式的区别

括号不一样

返回的值不一样===几乎不占用内存

各种推导式:生成器  列表   字典   集合

字典

合并大小写对应的value值,将k统一成小写

mcase = {'a':10,'b':34,'A':7,'Z':3}

mcase_frequency= {k.lower():mcase.get(k.lower(),0)+mcase.get(k.upper(),0) for k inmcase.keys()}print(mcase_frequency)

{'a': 17, 'z': 3, 'b': 34}

将一个字典的key和value对调

mcase = {'a':10,'b':34,'A':7,'Z':3}

mcase_frequency= {mcase[k]: k for k inmcase}print(mcase_frequency)

{10: 'a', 3: 'Z', 34: 'b', 7: 'A'}

集合

计算列表中每个值的平方,自带去重功能

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

{1, 4}

它们都有遍历操作和筛选操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值