python高端玩法_一些还不熟悉的python玩法[一]

生成器对象:

假设a = [1,2,3],我们知道x = [i for i in a]可以生成一个序列,那[]换成()会怎样呢,case如下:

>>> a = [1,2,3]

>>> x = (n for n in a)

>>> x

at 0x1064f7e60>

x变成了一个生成器。我们知道生成器跟序列的对比就是生成器不会一次保存全部对象在内存里,但访问速度没有序列快。这个就可以灵活运用了

——————————————————————————————————————————

生成器函数的send和next:

yield关键字常用来把函数变成生成器,而它也有另一种玩法,case如下:

>>> def test():

...     a = 5

...     while 1:

...             f = (yield a)

...             if f is not None:

...                     a = f

...

>>> g = test()

>>> g

>>> g.next()

5

>>> g.next()

5

>>> g.send(7)

7

>>> g.next()

7

>>>

send可以接收发送值

——————————————————————————————————————————

dict类的__missing__方法和defaultdict:

当dict类的key值不在dict中时,会调用这个方法,因此可以重写这个方法,case如下:

>>> class Test(dict):

...     def __missing__(self, key):

...             self[key] = r = []

...             return r

...

>>> t = Test()

>>> t['a'].append(1)

>>> t

{'a': [1]}

>>>

在collections里面有个defaultdict,也是可以设置不存在的key的默认值,与__missing__类似:

>>> from collections import defaultdict >>> m = defaultdict(list) >>> m["foo"].append(1) >>> m["foo"].append(2) >>> dict(m) {'foo': [1, 2]}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值