python高级特性简介


Posted in Python onAugust 13, 2020

Python中的五种特性:切片,迭代,列表生成式,生成器,迭代器。

切片

切片就相当于其他语言中的截断函数,取部分指定元素用的。

L = list(range(100))

#利用切片取部分元素
print(L[0:10]) #取从索引从0到9的前10个元素
print(L[-10:]) #取最后10个元素
print(L[10:20])#取从索引10到19的10个元素
print(L[:10:2])#从前10个元素中每两个取一个元素
print(L[::10]) #所有元素中每10个取一个元素

运行结果:

取从索引从0到9的前10个元素: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
取最后10个元素: [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
取从索引10到19的10个元素: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
从前10个元素中每两个取一个元素: [0, 2, 4, 6, 8]
所有元素中每10个取一个元素: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

迭代(Iteration)

迭代,即遍历。使用for循环的时候,只要是作用于一个可迭代对象,for循环就能正常运行。

判断一个对象是够是可迭代对象:

from collections import Iterable

print('字符串 is Iterable ?',isinstance('abc',Iterable))
print('list is Iterable ?',isinstance([1,2,3],Iterable))
print('整数 is Iterable ?',isinstance(123,Iterable))

运行结果:

字符串 is Iterable ? True
list is Iterable ? True
整数 is Iterable ? False

遍历可迭代对象的几种方法:

#遍历字符串:
for ch in 'abc':
  print(ch)

#遍历list
L = ['A','B','C']
for tmp in L:
  print(tmp)

for i,value in enumerate(L):
  print(i,':',value)

#遍历dict
d = {'1':'111','2':'222','3':'333'}
for key,v in d.items():
  print('key:',key,'value:',v)

列表生成式

常见的list生成方式:

list(range(1, 11))

然而通过python内置的列表生成式,你可以换不同的姿势生成list,你可以这样:

[x * x for x in range(1,11)]

#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

这样:

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

[4, 16, 36, 64, 100]

还可以这样:

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

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

是不是很涨姿势? 哈哈~

生成器(generator)

通过上面的列表生成式,我们可以直接创建一个列表。但是受内存限制,列表容量肯定是有限的。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环过程中不断推算出后续的元素呢?这样讲就不必创建完整的list,从而节省大量空间。在Python中,这种一边循环一边计算的机制,成为生成器:generator.

创建一个生成器最简单的方法: 把list的[]改成()

L = [x * x for x in range(1,10)]
print(L)

g = (x * x for x in range(1,10))
print(g)

//运行结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
<generator object <genexpr> at 0x10cc14938>

而且,generator也是可迭代对象,可以通过for来遍历。

定义generator的另一种方法:

def fib(max):
  n,a,b = 0,0,1
  while n < max:
    yield b
    a,b = b, a+b
    n = n + 1
  return 'done' 

print(fib(6))

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

迭代器(Iterator)

生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

可以使用isinstance()判断一个对象是否是Iterator对象:

from collections import Iterator
print('list is Iterator ?',isinstance([], Iterator))
print('dict is Iterator ?',isinstance({}, Iterator))
print('string is Iterator ?',isinstance('123', Iterator))

//运行结果:
list is Iterator ? False
dict is Iterator ? False
string is Iterator ? False

以上就是python高级特性简介的详细内容,更多关于python高级特性的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现计算最小编辑距离
Mar 17 Python
python实现屏保计时器的示例代码
Aug 08 Python
python如何查看微信消息撤回
Nov 27 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
详解KMP算法以及python如何实现
Sep 18 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
Python实现socket库网络通信套接字
Jun 04 Python
Python Django ORM连表正反操作技巧
Jun 13 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 Python
Pytest如何使用skip跳过执行测试
Aug 13 #Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 #Python
Python logging模块原理解析及应用
Aug 13 #Python
matplotlib基础绘图命令之imshow的使用
Aug 13 #Python
使用jupyter notebook运行python和R的步骤
Aug 13 #Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 #Python
Python如何读写CSV文件
Aug 13 #Python
You might like
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
Vue render深入开发讲解
2018/04/13 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
电气专业推荐信范文
2013/11/18 职场文书
护士辞职信范文
2014/01/19 职场文书
会计求职信
2014/05/29 职场文书
党支部特色活动方案
2014/08/20 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
排球赛新闻稿
2015/07/17 职场文书
2016年记者节感言
2015/12/08 职场文书
个人售房合同协议书
2016/03/21 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang