python核心编程第二版第八章学习笔记

一. 更简明的条件表达式
>>> x, y = 4, 3
>>> smaller = x if x < y else y
>>> smaller
3
二 . xrange() 内建函数
    xrange() 类似 range() , 不过当你有一个很大的范围列表时, xrange() 可能更为适合, 因为 它不会在内存里创建列表的完整拷贝. 它只被用在 for 循环中, 在 for 循环外使用它没有意义。 同样地, 你可以想到, 它的性能远高出 range(), 因为它不生成整个列表。
三迭代器和生成器
1.什么是迭代器?
迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循 环机制(例如 for 语句)需要下一个项时, 调用迭代器的 next() 方法就可以获得它. 条目全部取 出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代完成.
2. 使用迭代器
>>> myTuple = (123, 'xyz', 45.67)
>>> i = iter(myTuple)                   #创建迭代器
>>> i.next()                            #获取序列的元素  
123
>>> i.next()
'xyz'
>>> i.next()
45.67
>>> i.next()
Traceback (most recent call last):          #迭代完成,引发异常
File "", line 1, in ?
StopIteration
除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你 当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上. 在迭代字典的 key 时, 你绝对不能改变这个字典. 使用字典的 keys() 方法是可以的, 因为 keys() 返回一个独立于字典的列表.
四  列表解析
1.列表 解析的语法:
[expr for iter_var in iterable]
2.map函数和lambda函数结合

>>> map(lambda x: x ** 2, range(6))
[0, 1, 4, 9, 16, 25]
3filter函数与lambda函数结合
>>> seq = [11, 10, 9, 9, 10, 10, 9, 8, 23, 9, 7, 18, 12, 11, 12]
>>> filter(lambda x: x % 2, seq)
[11, 9, 9, 9, 23, 9, 7, 11]
4.列表解析与if语句的结合
>>> [x for x in seq if x % 2]
[11, 9, 9, 9, 23, 9, 7, 11]
5.双重for循环列表解析
>>> [(x+1,y+1) for x in range(3) for y in range(5)]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2,
3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]












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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值