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中AND、OR的一个使用小技巧
Feb 18 Python
Python实现自动上京东抢手机
Feb 06 Python
Python常见字典内建函数用法示例
May 14 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
python如何实现单链表的反转
Feb 10 Python
Python pip配置国内源的方法
Feb 14 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
python爬虫爬取某网站视频的示例代码
Feb 20 Python
Python超详细分步解析随机漫步
Mar 17 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自动加载机制的深入分析
2013/06/08 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
简单学习vue指令directive
2016/11/03 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
javascript 面向对象实战思想分享
2017/09/07 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
js的各种数据类型判断的介绍
2019/01/19 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
在python3中实现更新界面
2020/02/21 Python
解决python运行启动报错问题
2020/06/01 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
HTML5通用接口详解
2016/06/12 HTML / CSS
预备党员综合考察材料
2014/05/31 职场文书
党校毕业心得体会
2014/09/13 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
2016年母亲节广告语
2016/01/28 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
利用Redis实现点赞功能的示例代码
2022/06/28 Redis