Python_高级特性

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等是没有下标的通过Python的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用户组

时间: 2024-10-05 05:32:16

Python_高级特性的相关文章

MapReduce编程实战之“高级特性”

本篇介绍MapReduce的一些高级特性,如计数器.数据集的排序和连接.计数器是一种收集作业统计信息的有效手段,排序是MapReduce的核心技术,MapReduce也能够执行大型数据集间的""连接(join)操作. 计数器 计数器是一种收集作业统计信息的有效手段,用于质量控制或应用级统计.计数器还可用于辅助诊断系统故障.对于大型分布式系统来说,获取计数器比分析日志文件容易的多. 示例一:气温缺失及不规则数据计数器 import java.io.IOException; import

javascript高级特性

01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_对象_定义函数对象09_对象_内建对象10_原型_为函数对象增加属性或方法11_原型_利用函数对象本身重写原型12_继承_函数对象之间的继承13_继承_普通对象之间的继承 javascript高级特性(面向对象): * 面向对象:   * 面向对象和面向过程的区别:     * 面向对象:人就是对象,年龄\

python之高级特性

掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n <= 99: L.append(n) n = n + 2 取list的前一半的元素,也可以通过循环实现. 但是在Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好. 基于这一思想,我们来介绍Python中非常有用的高级特性,1行代码能实现的功能,决不写5行代码.请始终

JSP简明教程(五):高级特性

JSP过滤器 过滤器的作用是给web请求增加额外的逻辑,每个页面可以被多个过滤器进行处理.过滤器需要在web.xml文件中进行定义,语法如下.过滤器的执行顺序与filter-mapping的定义顺序相同. <filter> <filter-name>FilterName</filter-name> <filter-class>TestFilter</filter-name> <init-param> <param-name>

Day-5: Python高级特性

python的理念是:简单.优雅.所以,在Python中集成了许多经常要使用的高级特性,以此来简化代码. 切片: 对于一个list或者tuple,取其中一段的元素,称为切片(Slice). L[start:end]表示取L中从索引号为start到end的元素,其中如果顺着取,则索引号范围为0~len(L)-1:反着取,则索引号范围为-1~-len(L). 迭代: Python中迭代用for...in来完成.对于list或者tuple,就是for name in names之类:而对于dict,就

ActiveMQ中的Destination高级特性(一)

---------------------------------------------------------------------------------------- Destination高级特性----->Composite Destinations 组合队列Composite Destinations : 允许用一个虚拟的destination代表多个destinations,这样就可以通过composite destinations在一个操作中同时向多个queue/topic发

《深入理解Java虚拟机 JVM高级特性...》核心笔记

深入理解Java虚拟机 JVM高级特性与最佳实践(第二版) 核心笔记 JAVA 环境: JAVA虚拟机高级特性: 一:java内存区域与内存异常 一):运行数据区     1:程序计数器(Program Counter Register),也称"PC寄存器" A:用来指示需要执行哪条指令的.(在汇编语言中,CPU在得到指令之后,程序计数器便自动加1或者根据                    转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令.) B:由于在JVM中,多线程

JavaScript【5】高级特性(作用域、闭包、对象)

笔记来自<Node.js开发指南>BYVoid编著 1.作用域 if (true) { var somevar = 'value'; } console.log(somevar); JavaScript的作用域完全是由函数决定的,if.for语句中的花括号不是独立的作用域. 1.1.函数作用域 作用域是通过函数来定义的,在一个函数中定义的变量只对这个函数内部可见,我们称为函数作用域.在函数中引用一个变量时,JavaScript会先搜索当前函数作用域,或者称为"局部作用域",

JS高级特性

一.JavaScript的同源策略 参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Same_origin_policy_for_JavaScript 同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin). 下表给出了相对http://store.c