我是靠谱客的博主 过时钢笔,最近开发中收集的这篇文章主要介绍(Python Primary) - 廖雪峰Python3 - 5.高级特性5. 高级特性,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
5. 高级特性
5.1 切片(Slice)
-
L[m:n]
表示取索引为m到n-1的三个元素,若m=0则可省略为L[:n]
-
L[:10:2]
表示前10个元素,每两个取一个 -
L[::5]
表示所有元素每5个取一个 -
L[:]
可复制一个list -
L[::-1]
表示list翻转 -
list、tuple、字符串都可用切片的方法
5.2 迭代
- 采用
for...in
来完成遍历迭代 - dict的迭代
for key in dict
迭代的是keyfor value in dict.values()
迭代的时valuefor k, v in dict.items()
迭代的是key和value
- 注意:需要数据类型为可迭代的对象(即对象为Iterable)
- list、tuple、dict、str均可迭代
- 判断对象是否可迭代:
>>> 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')
可迭代索引和元素
5.3 列表生成式
- Python内置用来创建list的生成式
list(range(1, 11)) or [x for x in range(1, 11)]
生成1-10的list- e.g. 创建当前目录下文件名的list
import os
[d for d in os.listdir('.')]
- 注意:
for
后的if
是过滤条件不能带else
,但是可以在for前加[x if x % 2 == 0 else -x for x in range(1, 11)]
5.4 生成器generator
- 列表生成式的缺点:受到内存限制,列表容量肯定是有限的
- 解决:一边循环生成一边计算→生成器(generator)
- 把列表生成式的[ ]改成( ),通过
next()
函数获取下一个返回值(无元素后抛出StopIteration
),或用for...in
循环迭代
g = (x * x for x in range(10))
next(g)
next(g)
for n in g:...
- 如果一个函数包含
yield
,那么这个函数就是一个generator,在每次调用next()的时候遇到yield就会返回,再次执行时从上次返回的yield处继续执行
def odd():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
- 注意:在使用for循环调用generator的时候拿不到return的返回值,必须捕获
StopIteration
错误,返回值包含在StopIteration
的value中
>>> for n in fib(6):
...
print(n)
...
1
1
2
3
5
8
>>> 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
5.5 迭代器Iterator
-
可迭代对象
Iterable
类型:list、tuple、dict、set、str、generator -
这些可以直接作用于
for
循环的对象统称为可迭代对象:Iterable
- 可以使用
isinstance()
判断一个对象是否是Iterable
对象
- 可以使用
>>> from collections.abc import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
- 可以被
next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
- 可以使用
isinstance()
判断一个对象是否是Iterator
对象 - 生成器都是
Iterator
对象
- 可以使用
>>> from collections.abc import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
- 把
list
、dict
、str
等Iterable
变成Iterator
可以使用iter()
函数:
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
- 总结
- 凡是可作用于
for
循环的对象都是Iterable
类型; - 凡是可作用于
next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列; - 集合数据类型如
list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。 - Python的
for
循环本质上就是通过不断调用next()
函数实现的
- 凡是可作用于
参考教程
廖雪峰老师的Python3教程
(转载整理自网络,如有侵权,联系本人删除,仅供技术总结使用)
最后
以上就是过时钢笔为你收集整理的(Python Primary) - 廖雪峰Python3 - 5.高级特性5. 高级特性的全部内容,希望文章能够帮你解决(Python Primary) - 廖雪峰Python3 - 5.高级特性5. 高级特性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复