Python高级特性
2017-02-16 15:06
260 查看
切片(Slice)(非常灵活,体现了python的简便性)
迭代
列表生成式(List Comprehensions)
生成器(generator)
迭代器(可以用for循环的都可以迭代)
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是永远不可能存储全体自然数的。
相关文章推荐
- Django中的Python高级特性
- Python高级特性:类构造与析构
- Python高级特性-列表解析
- Python自学笔记之高级特性2——列表生成式
- Python高级特性
- 三、python高级特性(切片、迭代、列表生成器、生成器)
- Python高级特性:类属性
- Python高级特性:私有属性
- Python_高级特性
- Python的高级特性
- Python高级特性(3): Classes和Metaclasses(转)
- python高级特性
- Python高级特性(1):Iterators、Generators和itertools
- Python高级特性之:List Comprehensions、Generator、Dictionary and set comprehensions
- Python高级特性(2):Closures、Decorators和functools(转)
- Python的高级特性之切片、迭代、列表生成式、生成器
- Python自学笔记之高级特性——生成器
- Python高级特性:利用类构造及析构原理实现单实例模式
- Python高级特性-迭代(Iteration)-列表生成式-生成器