您的位置:首页 > 编程语言 > Python开发

Python高级特性

2017-02-16 15:06 260 查看
切片(Slice)(非常灵活,体现了python的简便性)

1.取一个list和tuple的部分元素时的简化操作;


>>>L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']

#从0开始不包括3,第一个索引是0可省略,也支持负数按倒数的顺序取值,什么都不写[:]就复制一个list
>>>

>>> for key in d:
...     print(key)

LL = list(range(100))
#前十个

>>> LL[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#后十个

>>> LL[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

#前十个每两个取一个
>>> LL[:10:2]


2.tuple也可以切片操作只是返回结果认识tuple(和list唯一的区别tuple是不变对象);


迭代

1.在python中迭代通过for...in...实现,dict和list的结构不同,故迭代结果也大不相同,dict默认迭代key,若要迭代key则需要使用for value in dict_name.values(),同时迭代可以喝value使用for k, v in d.items()


>>> d = {'a': 1, 'b': 2, 'c': 3}

>>> for key in d:... print(key)1234


2.通过collections模块的iterator类型判断一个对象是否可迭代,用enumerate函数可以把一个list变成索引-元素对


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

>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C
#注意上面的循环里,同时引用了两个变量,这在python是很常见的


列表生成式(List Comprehensions)

生成[1x1, 2x2, 3x3, ..., 10x10]


#普通的循环方法

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

#列表生成式,后面还可以接条件

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

#双重循环

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']


生成器(generator)

1、第一种方法创建一个生成器就只需把生成列表的代码“[]”换成“()”,list的函数可以直接打印出来,generator需 要通过next()函数得到下一个返回值,generator里面保存的是算法,每次调用next()函数式就会计算出下一个元素的值, 知道没有下一个就抛出StopIteration的错误,结合循环进行打印; 2、第二种方法定义一个函数其中包括yield关键字那么他就是一个生成器;generator与函数的执行顺序不一样,generator 是遇到yield就返回,再次执行时从上次返回yield与举出继续执行。实际代码中很少用next去去值一般是用for循环,但是for 是收不到return语句的,所以我们通过捕获StopIteration错误,返回值包含在StopIteration的value中来判断生成器是 否已经到最后;


>>> g = fib(6)
>>> while True:
...     try:
...         x = next(g)
...         print('g:', x)
...     except StopIteration as e:
...         print('Generator return value:', e.value)
...         break
...
g: 1
g: 1
g: 2
g: 3
g: 5
g: 8
Generator return value: done


迭代器(可以用for循环的都可以迭代)

1、iterable是list、tuple、dict、set、str、generator的迭代器;(使用isinstance(type,iterable)函数判断类型);
2、iterator是generator迭代器(可以调用next()函数)(若要把list、dict、str的iterable编程iterator使用iter()函数);
这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。
可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: