Python_高级特性
Python高级特性
author:lxy
切片、迭代、列表生成式、生成器
切片
Python中 代码越少越简单越好,
当要取一个list中的某一部分的元素时我们可以使用判断+循环实现,但是这略显繁琐,在Python提供了专门的方法切片
slice切片,用来获取list中某一段元素
tuple、str等都可以看做是一种list,使用切片获取的片段还是他们原来相应的类型
例1、对list进行切片
- >>> n = [1,3,2,5,6,8]
- >>> n[0:3] #不含尾
- [1, 3, 2]
- >>> n[-2:] #可以使用倒序的方式截取
- [6, 8]
- >>>
复制代码
例2、对tuple进行切片
- >>> t = ('a','s','d','d')
- >>> t[:3] #默认从0开始截取
- ('a', 's', 'd') #tuple切片后还是tuple
- >>>
复制代码
例3、对str进行切片
- >>> s = 'dfsafsf'
- >>> s[:3]
- 'dfs' #字符串切片后还是字符串
- >>> #在Python中没有专门对字符串截取操作的函数,只要使用切片就可以完成
复制代码
迭代
通过for循环遍历可迭代的对象,称为迭代。
在c或Java中迭代list等是通过下标来完成的。
虽然list这样的对象是有下标的我们可以完成迭代,但是dict、str等是没有下标的通过for...in一样可以完成迭代
通过itervalues()可以迭代dict的v
通过iteritems()可以迭代dict的k_V
如何判断一个对象是否可迭代
通过collections模块的iterable类型判断
例:
- >>> from collections import Iterable #获取collections模块的Iterable类型
- >>> isinstance('dfdas',Iterable) #判断是否可迭代
- True
- >>> isinstance(555,Iterable)
- False
- >>>
复制代码
在Python中实现下标循环,Python内置的enumerate函数可以把一个list变成--索引——元素
例:
- >>> for i,v in enumerate(('s','d','g')):
- print(i,v)
- 0 s
- 1 d
- 2 g
- >>>
复制代码
列表生成式
range()
1、通过range()生成一个连续的整数序列
2、通过--<表达式> <for循环> --产生列表
例1、生成一个整数序列
- >>> a = range(3)
- >>> for i in a:
- print(i)
- 0
- 1
- 2
- >>>
复制代码
例2、生成特殊的数量
- >>> c = [x*x for x in range(2,5)]
- >>> c
- [4, 9, 16]
- >>>
复制代码
列表生成中加if、嵌套
使用if进行过滤
例、
- >>> a = [x*x for x in range(5) if x>2] #加入if对x进行条件过滤
- >>> a
- [9, 16]
- >>>
复制代码
例、
- >>> [m+n for m in 'abc' for n in 'xyz']
- ['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
- >>>
复制代码
例:使用列表生成式,列出当前目录下所有的文件夹和目录名
- >>> import os #导入os模块
- >>> [d for d in os.listdir('.')] #括号内为指定的路径
- ['DLLs', 'Doc', 'include', 'Lib', 'libs', 'Scripts', 'tcl', 'Tools']
- >>>
复制代码
生成器Generator
但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
Python提供了这一解决方案,列表元素通过某种算法推算出,在循环的过程中不断推算出后续元素,而不必创建完整的list
Python保存的是算法,每次调用next()
创建generator
1、把列表生成式的[]改成()
2、在一个普通函数中添加了yield关键字之后,这个函数就不在是一个普通函数,而是一个generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回yield语句处继续执行。
例1、
- >>> b = (x for x in range(10))
- >>> b
- <generator object <genexpr> at 0x02CB1418>
- >>> next(b) #获取下一元素,由于generator也是可迭代的一般使用for循环进行迭代
- 0
- >>>
复制代码
例2、
- >>> def f():
- print('s1')
- yield 1
- print('s2')
- yield 2
- >>> a = f()
- >>> next(a)
- s1
- 1
- >>> next(a)
- s2
- 2
- >>> next(a)
- Traceback (most recent call last):
- File "<pyshell#11>", line 1, in <module>
- next(a)
- StopIteration #当没有yield可以执行的时候抛出错误
- >>>
复制代码
对于函数改造得到的generator,在遇到return或者函数体完成就结束了generator的指令,
例:
- >>> def f():
- print('s1')
- yield 1
- return
- print('s2')
- yield 2
- >>> for i in f():
- print(i)
- s1
- 1
- >>> >>> def f():
- print('s1')
- yield 1
- return
- print('s2')
- yield 2
- >>> for i in f():
- print(i)
- s1
- 1
- >>>
复制代码
来自群组: Java用户组
Python_高级特性相关推荐
- Redis 高级特性(2)—— 发布 订阅模式
Redis 高级特性 -- 发布订阅 1. 发布-订阅介绍 "发布-订阅"模式包含两种角色,分别为发布者和订阅者.订阅者可以订阅一个或者若干个频道(channel),而发布者可以向 ...
- Redis 高级特性(1)—— 事务 过期时间 排序
1. Redis 高级特性 -- 事务 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执 ...
- Java高级特性增强-多线程
请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...
- Java这个高级特性-泛型,很多人还没用过!
点击关注公众号,Java干货及时送达 泛型是 Java 的高级特性之一,如果想写出优雅而高扩展性的代码,或是想读得懂一些优秀的源码,泛型是绕不开的槛.本文介绍了什么是泛型.类型擦除的概念及其实现,最后 ...
- Java这个高级特性,很多人还没用过!
点击关注公众号,Java干货及时送达 泛型是 Java 的高级特性之一,如果想写出优雅而高扩展性的代码,或是想读得懂一些优秀的源码,泛型是绕不开的槛.本文介绍了什么是泛型.类型擦除的概念及其实现,最后 ...
- Python高级特性:切片、迭代、列表生成式、生成器与迭代器
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...
- python函数第二次运行报错_Python学习笔记2-函数、高级特性
函数 调用函数 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数 >>> abs(100) 100 >>> abs(-20) 20 ...
- RabbitMQ(二):RabbitMQ高级特性
RabbitMQ(二):RabbitMQ高级特性 RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitM ...
- python3自动释放线程_Python3高级特性:并发
前言 可迭代对象.迭代器.生成器 python中的 list, set 等是可迭代对象,可迭代对象使用 iter() 方法可以将其变成迭代器. 可迭代对象有 __iter__ 方法,该方法返回一个迭代 ...
最新文章
- 螳螂捕蝉黄雀在后!地下黑客论坛免费远控木马被曝“后门”
- TypeScript 初识
- dnf跨一服务器修复,DNF跨区服务器炸裂:一阶段史诗回档,官方补偿何在
- 浅拷贝和深拷贝的应用
- 《Credit Risk Scorecard》第四章:Data Review and Project Parameters
- 李开复:走向全球的两大路径,中美何以各占其一
- 向linux kernel中添加cmdline的四种方式
- linux下的二进制文件的编辑和查看 -
- Lua学习教程之 可变參数数据打包与解包
- #UnityTips# 2017.11.14
- 【职业生涯】这样的开发人员每个团队都想要
- git revert 之后怎么撤销_Git撤销回滚操作(git reset 和 get revert)
- php 开源报表工具,PHP制作炫目的图表 PHP报表制作方法介绍
- 结巴分词,停用词生成词云图
- 数字化汗字中仲字如化数字化_如何将旧的电影照片数字化
- 90个外国英文网站强力推荐!!!
- 【OpenGL学习笔记④】——纹理贴图【SOIL2的配置 + 绘制木板 + 纹理环绕】
- huffman算法实现文件的压缩与解压
- gbase的安装及使用
- choose (when, otherwise)
热门文章
- KANZI入门第一篇之kanzi详解,教你轻松学kanzi
- 201609-2 python CCF 更简单的思路和代码 100分
- Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(9月7日~9月13日)...
- CSS基础-02 background(背景色)(背景色 background-color、背景图 background-image)
- 阿里面试官Redis把我问到哑口无言…
- jquery UI 隐藏关闭按钮
- MATLAB App Designer入门实战(一)
- 如何阻止iCloud照片库使用手机数据
- flash 磨损均衡处理