Python高级特性

来源:互联网 发布:世纪佳缘数据库.zip 编辑:程序博客网 时间:2024/05/16 08:15

Python高级特性

  1. 切片
  2. 迭代及迭代器
  3. 列表生成式
  4. 生成器

这些高级特性的作用都是一样的,为了代码的简洁、高效运行。

切片

切片让取一个list或tuple的部分元素变得相当简单,
e.g:
L=[‘jack’,’mike’,’jerry’]
那么第一个位置,索引为0:L[0]=’jack’;
索引从1-2,不包括2,L[1:2]=’mike’;
索引从倒数第二个到倒数第一个L[-2:-1]=’mike’;
间隔某个值取值:L[x:y:z],x表示起始位,y表示终止位,z表示间隔取值;

迭代

遍历List:
L = [‘mike’,’jack’,’jerry’]
for x in L:
print(‘Hello, %s!’ % x)

遍历dict:
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。

所以,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。
那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

>>> from collections import Iterable>>> isinstance('abc', Iterable) # str是否可迭代True>>> isinstance([1,2,3], Iterable) # list是否可迭代True>>> isinstance(123, Iterable) # 整数是否可迭代False

迭代器:
凡是可作用于for循环的对象都是Iterable类型,isinstance()可以判断一个对象是否是Iterable对象,如:isinstance(‘abc’, Iterable);
凡是可作用于next()函数的对象都是Iterator类型;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象;
Python的for循环本质上就是通过不断调用next()函数实现的.

PS:迭代器的具体用法及好处在后面实际用到时再做补充。

列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

条件过滤:for循环结合if语句
e.g:

>>> [x * x for x in range(1, 11) if x % 2 == 0][4, 16, 36, 64, 100]
L1 = ['Hello', 'World', 18, 'Apple', None]L2 = [s.lower() for s in [x for x in L1 if isinstance(x, str)]]print(L2)

生成器

概念:如果你要创建一个超大容量的list,其实不需要创建完整的list,在Python中,提供了一边循环一边计算的机制,称为生成器:generator。
创建生成器:只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> g = (x * x for x in range(10))>>> g<generator object <genexpr> at 0x1022ef630>

然后通过for循环打印出来:

for n in g:     print(n)
0 0
原创粉丝点击