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 相关文章推荐
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
Python 内置函数complex详解
Oct 23 Python
多版本Python共存的配置方法
May 22 Python
Python分析学校四六级过关情况
Nov 22 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
Python 函数返回值的示例代码
Mar 11 Python
python多线程http压力测试脚本
Jun 25 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
python输出数学符号实例
May 11 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
初品cakephp 入门基础
2012/02/16 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
javascript常用函数(2)
2015/11/05 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
python字典序问题实例
2014/09/26 Python
python 搜索大文件的实例代码
2019/07/08 Python
python程序 创建多线程过程详解
2019/09/23 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python错误的处理方法
2020/06/23 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
美国零售商店:Blue&Cream
2017/04/07 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
优秀员工评语
2014/02/10 职场文书
行政人事岗位职责
2014/03/17 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python