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 相关文章推荐
以windows service方式运行Python程序的方法
Jun 03 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
python 猴子补丁(monkey patch)
Jun 26 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
python中什么是面向对象
Jun 11 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
python生成xml时规定dtd实例方法
Sep 21 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 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版(3)
2006/10/09 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
js实现简单进度条效果
2020/03/25 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
Django处理文件上传File Uploads的实例
2018/05/28 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python实现Flappy Bird源码
2018/12/24 Python
Python循环实现n的全排列功能
2019/09/16 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
python 实现客户端与服务端的通信
2020/12/23 Python
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
敬老院活动总结
2014/04/28 职场文书
教室布置标语
2014/06/26 职场文书
美术课外活动总结
2014/07/08 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python