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字典简介以及用法详解
Nov 15 Python
Python模块结构与布局操作方法实例分析
Jul 24 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
linux下python中文乱码解决方案详解
Aug 28 Python
python实现多进程通信实例分析
Sep 01 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
Python3 pywin32模块安装的详细步骤
May 26 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 Python
Python+unittest+requests+excel实现接口自动化测试框架
Dec 23 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
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
如何实现JS函数的重载
2006/09/22 Javascript
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
js命名空间写法示例
2015/12/18 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
python实现倒计时的示例
2014/02/14 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
如何用python免费看美剧
2020/08/11 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
会计员岗位职责
2014/03/15 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
MySQL事务的隔离级别详情
2022/07/15 MySQL