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中的ceil()方法使用教程
May 14 Python
在Django的上下文中设置变量的方法
Jul 20 Python
Python 模块EasyGui详细介绍
Feb 19 Python
5款非常棒的Python工具
Jan 05 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
Python随机函数random()使用方法小结
Apr 29 Python
Python中的取模运算方法
Nov 10 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
Python中免验证跳转到内容页的实例代码
Oct 23 Python
python3爬虫中引用Queue的实例讲解
Nov 24 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生成WAP页面
2006/10/09 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
json 实例详细说明教程
2009/10/31 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python opencv实现证件照换底功能
2019/08/19 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
巴西在线鞋店:Shoestock
2017/10/28 全球购物
工作保证书范文
2014/04/29 职场文书
人力资源管理求职信
2014/08/07 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
vue修饰符.capture和.self的区别
2022/04/22 Vue.js