您的位置:首页 > 其它

高级特性(20160811).md

2017-06-16 14:04 120 查看
切片

Python提高切片操作符

迭代

在给定list或tuple,我们可以通过
for
循环来遍历。

Python的
for
循环抽象程度高于Java。

如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断

python

>from collections import Iterable

>isinstance('abc', Iterable)

>


列表生成式

列表生成式可以用更短的代码达到循环的效果。

写列表生成式时,把要生成的元素
x * x
放到前面,后面跟
for
循环,就可以把list创建出来

for
循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

python

>[x*x for x in range(1,11) if x%2 == 0]

>[4,16, 36, 64, 100]

>


还可以使用两层循环

python

>[m+n for m in 'ABC' for n in 'XYZ']

>['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

>


生成器

如果列表元素可以按照某种算法推算出来,从而节省大量的空间。这种一边循环一边计算的机制,称为生成器:generator。

创建
L
g
的区别仅在于最外层的
[]
()
L
是一个list,而
g
是一个generator。

打印生成器函数可以使用
next()
,获取下一个返回值。

generator保存的是算法,每次调用
next()
,就计算下一个元素的值,可使用
for
循环


如果一个函数定义中包含
yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator


小结

1. 凡是可作用于
for
循环的对象都是
Iterable
类型;

1. 凡是可作用于
next()
函数的对象都是
Iterator
类型,它们表示一个惰性计算的序列;

1. 集合数据类型如
list
dict
str
等是
Iterable
但不是
Iterator
,不过可以通过
iter()
函数获得一个
Iterator
对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: