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读取json文件并将数据插入到mongodb的方法
Mar 23 Python
Python编程之属性和方法实例详解
May 19 Python
python 容器总结整理
Apr 04 Python
Python模块结构与布局操作方法实例分析
Jul 24 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Python3 关于pycharm自动导入包快捷设置的方法
Jan 16 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
python 爬取学信网登录页面的例子
Aug 13 Python
python函数调用,循环,列表复制实例
May 03 Python
教你如何用python操作摄像头以及对视频流的处理
Oct 12 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 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中常用编辑器推荐
2007/01/02 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
php实现文件上传基本验证
2020/03/04 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
python yield关键词案例测试
2019/10/15 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
python实现逻辑回归的示例
2020/10/09 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
音乐系毕业生自荐信
2013/10/27 职场文书
商场中秋节广播稿
2014/01/17 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
运动会入场词200字
2014/02/15 职场文书
家长对老师的感言
2014/03/11 职场文书
毕业寄语大全
2014/04/09 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL