Python高级特性

author:lxy


切片、迭代、列表生成式、生成器

切片
Python中 代码越少越简单越好,

当要取一个list中的某一部分的元素时我们可以使用判断+循环实现,但是这略显繁琐,在Python提供了专门的方法切片

slice切片,用来获取list中某一段元素

tuple、str等都可以看做是一种list,使用切片获取的片段还是他们原来相应的类型

例1、对list进行切片

  1. >>> n = [1,3,2,5,6,8]
  2. >>> n[0:3] #不含尾
  3. [1, 3, 2]
  4. >>> n[-2:] #可以使用倒序的方式截取
  5. [6, 8]
  6. >>>

复制代码

例2、对tuple进行切片

  1. >>> t = ('a','s','d','d')
  2. >>> t[:3]                        #默认从0开始截取
  3. ('a', 's', 'd')                #tuple切片后还是tuple
  4. >>>

复制代码

例3、对str进行切片

  1. >>> s = 'dfsafsf'
  2. >>> s[:3]
  3. 'dfs'                                #字符串切片后还是字符串
  4. >>>                                 #在Python中没有专门对字符串截取操作的函数,只要使用切片就可以完成

复制代码

迭代
通过for循环遍历可迭代的对象,称为迭代。
在c或Java中迭代list等是通过下标来完成的。
虽然list这样的对象是有下标的我们可以完成迭代,但是dict、str等是没有下标的通过for...in一样可以完成迭代
通过itervalues()可以迭代dict的v
通过iteritems()可以迭代dict的k_V

如何判断一个对象是否可迭代
通过collections模块的iterable类型判断

例:

  1. >>> from collections import Iterable #获取collections模块的Iterable类型
  2. >>> isinstance('dfdas',Iterable) #判断是否可迭代
  3. True
  4. >>> isinstance(555,Iterable)
  5. False
  6. >>>

复制代码

在Python中实现下标循环,Python内置的enumerate函数可以把一个list变成--索引——元素
例:

  1. >>> for i,v in enumerate(('s','d','g')):
  2. print(i,v)
  3. 0 s
  4. 1 d
  5. 2 g
  6. >>>

复制代码

列表生成式
range()
1、通过range()生成一个连续的整数序列
2、通过--<表达式> <for循环> --产生列表

例1、生成一个整数序列

  1. >>> a = range(3)
  2. >>> for i in a:
  3. print(i)
  4. 0
  5. 1
  6. 2
  7. >>>

复制代码

例2、生成特殊的数量

  1. >>> c = [x*x for x in range(2,5)]
  2. >>> c
  3. [4, 9, 16]
  4. >>>

复制代码

列表生成中加if、嵌套
使用if进行过滤
例、

  1. >>> a = [x*x for x in range(5) if x>2] #加入if对x进行条件过滤
  2. >>> a
  3. [9, 16]
  4. >>>

复制代码

例、

  1. >>> [m+n for m in 'abc' for n in 'xyz']
  2. ['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
  3. >>>

复制代码

例:使用列表生成式,列出当前目录下所有的文件夹和目录名

  1. >>> import os                                                #导入os模块
  2. >>> [d for d in os.listdir('.')]        #括号内为指定的路径
  3. ['DLLs', 'Doc', 'include', 'Lib', 'libs', 'Scripts', 'tcl', 'Tools']
  4. >>>

复制代码

生成器Generator
但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
Python提供了这一解决方案,列表元素通过某种算法推算出,在循环的过程中不断推算出后续元素,而不必创建完整的list
Python保存的是算法,每次调用next()

创建generator
1、把列表生成式的[]改成()
2、在一个普通函数中添加了yield关键字之后,这个函数就不在是一个普通函数,而是一个generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回yield语句处继续执行。

例1、

  1. >>> b = (x for x in range(10))
  2. >>> b
  3. <generator object <genexpr> at 0x02CB1418>
  4. >>> next(b)                #获取下一元素,由于generator也是可迭代的一般使用for循环进行迭代
  5. 0
  6. >>>

复制代码

例2、

  1. >>> def f():
  2. print('s1')
  3. yield 1
  4. print('s2')
  5. yield 2
  6. >>> a = f()
  7. >>> next(a)
  8. s1
  9. 1
  10. >>> next(a)
  11. s2
  12. 2
  13. >>> next(a)
  14. Traceback (most recent call last):
  15. File "<pyshell#11>", line 1, in <module>
  16. next(a)
  17. StopIteration                #当没有yield可以执行的时候抛出错误
  18. >>>

复制代码

对于函数改造得到的generator,在遇到return或者函数体完成就结束了generator的指令,

例:

  1. >>> def f():
  2. print('s1')
  3. yield 1
  4. return
  5. print('s2')
  6. yield 2
  7. >>> for i in f():
  8. print(i)
  9. s1
  10. 1
  11. >>> >>> def f():
  12. print('s1')
  13. yield 1
  14. return
  15. print('s2')
  16. yield 2
  17. >>> for i in f():
  18. print(i)
  19. s1
  20. 1
  21. >>>

复制代码

来自群组:  Java用户组

Python_高级特性相关推荐

  1. Redis 高级特性(2)—— 发布 订阅模式

    Redis 高级特性 -- 发布订阅 1. 发布-订阅介绍 "发布-订阅"模式包含两种角色,分别为发布者和订阅者.订阅者可以订阅一个或者若干个频道(channel),而发布者可以向 ...

  2. Redis 高级特性(1)—— 事务 过期时间 排序

    1. Redis 高级特性 -- 事务 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执 ...

  3. Java高级特性增强-多线程

    请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...

  4. Java这个高级特性-泛型,很多人还没用过!

    点击关注公众号,Java干货及时送达 泛型是 Java 的高级特性之一,如果想写出优雅而高扩展性的代码,或是想读得懂一些优秀的源码,泛型是绕不开的槛.本文介绍了什么是泛型.类型擦除的概念及其实现,最后 ...

  5. Java这个高级特性,很多人还没用过!

    点击关注公众号,Java干货及时送达 泛型是 Java 的高级特性之一,如果想写出优雅而高扩展性的代码,或是想读得懂一些优秀的源码,泛型是绕不开的槛.本文介绍了什么是泛型.类型擦除的概念及其实现,最后 ...

  6. Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...

  7. python函数第二次运行报错_Python学习笔记2-函数、高级特性

    函数 调用函数 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数 >>> abs(100) 100 >>> abs(-20) 20 ...

  8. RabbitMQ(二):RabbitMQ高级特性

    RabbitMQ(二):RabbitMQ高级特性 RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitM ...

  9. python3自动释放线程_Python3高级特性:并发

    前言 可迭代对象.迭代器.生成器 python中的 list, set 等是可迭代对象,可迭代对象使用 iter() 方法可以将其变成迭代器. 可迭代对象有 __iter__ 方法,该方法返回一个迭代 ...

最新文章

  1. 螳螂捕蝉黄雀在后!地下黑客论坛免费远控木马被曝“后门”
  2. TypeScript 初识
  3. dnf跨一服务器修复,DNF跨区服务器炸裂:一阶段史诗回档,官方补偿何在
  4. 浅拷贝和深拷贝的应用
  5. 《Credit Risk Scorecard》第四章:Data Review and Project Parameters
  6. 李开复:走向全球的两大路径,中美何以各占其一
  7. 向linux kernel中添加cmdline的四种方式
  8. linux下的二进制文件的编辑和查看 -
  9. Lua学习教程之 可变參数数据打包与解包
  10. #UnityTips# 2017.11.14
  11. 【职业生涯】这样的开发人员每个团队都想要
  12. git revert 之后怎么撤销_Git撤销回滚操作(git reset 和 get revert)
  13. php 开源报表工具,PHP制作炫目的图表 PHP报表制作方法介绍
  14. 结巴分词,停用词生成词云图
  15. 数字化汗字中仲字如化数字化_如何将旧的电影照片数字化
  16. 90个外国英文网站强力推荐!!!
  17. 【OpenGL学习笔记④】——纹理贴图【SOIL2的配置 + 绘制木板 + 纹理环绕】
  18. huffman算法实现文件的压缩与解压
  19. gbase的安装及使用
  20. choose (when, otherwise)

热门文章

  1. KANZI入门第一篇之kanzi详解,教你轻松学kanzi
  2. 201609-2 python CCF 更简单的思路和代码 100分
  3. Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
  4. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(9月7日~9月13日)...
  5. CSS基础-02 background(背景色)(背景色 background-color、背景图 background-image)
  6. 阿里面试官Redis把我问到哑口无言…
  7. jquery UI 隐藏关闭按钮
  8. MATLAB App Designer入门实战(一)
  9. 如何阻止iCloud照片库使用手机数据
  10. flash 磨损均衡处理