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操作MySQL数据库的方法分享
May 29 Python
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python基于time模块求程序运行时间的方法
Sep 18 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
详解Python中where()函数的用法
Mar 27 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
python 引用传递和值传递详解(实参,形参)
Jun 05 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
python 安装移动复制第三方库操作
Jul 13 Python
opencv 分类白天与夜景视频的方法
Jun 05 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
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
php类自动加载器实现方法
2015/07/28 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
javascript基础知识
2016/06/07 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
vue的常用组件操作方法应用分析
2018/04/13 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
python使用webbrowser浏览指定url的方法
2015/04/04 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
浅谈Python 函数式编程
2020/06/20 Python
python归并排序算法过程实例讲解
2020/11/04 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
迎元旦广播稿
2014/02/22 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
家属慰问信
2015/02/14 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
Python OpenCV超详细讲解基本功能
2022/04/02 Python
vue中data里面的数据相互使用方式
2022/06/05 Vue.js