Python学习笔记——高级特性

原创 2016年09月01日 01:05:21

继续之前的学习,下面是一些高级特性。

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317568446245b3e1c8837414168bcd2d485e553779e000


1. 切片

取指定索引范围的操作,可以通过切片(slice)来实现。

如L[0:3]表示从列表索引0开始,到索引3(但不包含)的子集。

如果第一个索引是0,可以省略,如L[:3]。

Python也支持倒数切片,如L[-2:],L[-2:-1]。

切片还有第三个参数,表示每隔xx个取一个,如L[::5]表示每5个取一个。

如果都省略,则可以复制一个列表出来,如L[:]。

tuple同样也可以进行切片操作,不过结果是tuple。

字符串也可以进行切片操作,结果是字符串。


2. 迭代

Python可以通过for...in来迭代可迭代的对象。

对于dict,默认是遍历key,如果要遍历value,可以用for value in dict.values();如果要同时遍历,可以用for key, value in dict.items()。

可通过collections模块的Iterable类型来判断是否可以迭代,使用方法如下:

from collections import Iterable
isinstance('abc', Iterable)

如果想像Java那样对list按下标进行遍历,可以使用enumerate函数,如下:

for i, value in enumerate(['a', 'b', 'c']):
    print(i, value)

3. 列表生成式

写列表生成式式,把要生成的元素放前面,后面跟for循环,还可以加上if判断,甚至多层for循环。

比如下面的例子:

[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']

有了列表生成式,代码可以写的很简洁,比如输出当前目录下的所有文件和目录名:

import os
[d for d in os.listdir('.')]


4. 生成器

一边循环一边计算的机制。

第一种方法:把列表生成式的[]改成()。

g = (x * x for x in range(1, 11))

第二种方法:使用yield关键字。

生成器和函数的执行流程不一样,生成器在每次调用next()时执行,遇到yield语句返回,再次执行时从上次返回的yield语句处再次执行。

def odd():
    yield 1
    yield 3
    yield 5

o = odd()
next(o)
# 1
next(o)
# 3
next(o)
# 5

使用for循环调用生成器时,是拿不到返回值的。如果想拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中,如下:

while True:
    try:
        next(g)
    except StopIteration as e:
        print(e.value)
        break

杨辉三角的实现方式:

def triangle():
    L = [1]
    while True:
        yield L
        L = [1] + [L[m] + L[m+1] for m in range(0, len(L)-1)] + [1]

n = 0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

# 输出
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]
# [1, 5, 10, 10, 5, 1]
# [1, 6, 15, 20, 15, 6, 1]
# [1, 7, 21, 35, 35, 21, 7, 1]
# [1, 8, 28, 56, 70, 56, 28, 8, 1]
# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]


5. 迭代器

可以直接作用于for循环的对象称为可迭代对象:Iterable,可以使用isinstance()判断一个对象是否是Iterable对象。

from collections import Iterable
isinstance('a', Iterable)
# True

可以被next()函数调用并不断返回下一个值得对象称为迭代器:Iterator,可以使用isinstance()判断一个对象是否是Iterator对象。

from collections import Iterator
isinstance('a', Iterator)
# False

将list、dict、str等Iterable变为Iterator可以使用iter()。

Iterator的计算是惰性的,只有在需要返回下一个数据的时候才进行计算。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Python学习笔记(三)高级特性

python的高级特性,具体包括切片、迭代、列表生成式、生成器和迭代器。其中实现了生成器章节的杨辉三角生成器的习题

Python学习笔记二(高级特性)

本文主要对Python的函数调用的使用进行讲解。

廖雪峰python学习笔记4:高级特性

# -*- coding: utf-8 -*- #切片 #如何取一个list或tuple的部分元素? #和切片一比,循环很麻烦 L = ['Michael', 'Sarah', 'Tracy', '...

Python学习笔记06_高级特性

切片 L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3. 如果第一个索引是0,还可以省略L[:3] L[-2:],表示倒数第二个元素到末尾。L[-2:-1],表示倒数第二个元素到倒数第...

python学习笔记3:面向对象的高级特性3 定制类

Python的class中有许多特殊用途的函数,可以帮助我们定制类。 请看代码:class Student(object): def __init__(self,name): ...

python学习笔记1:面向对象的高级特性1__slots__

1.使用slots(第一次写博客下划线打不出来,请看代码): python是一种动态语言,在正常情况下,我们定义一个类,再创建一个类的实例,我们在运行代码的时候,可以通过给这个实例绑定一个属...

Python之学习笔记(高级特性)

[TOC] 切片,迭代,列表表达式,生成器高级特性# -*- coding: utf-8 -*-from collections import IterableL = [] n = 1 while ...

Python学习笔记(七):高级特性、函数式编程、模板(快速入门篇)

看完自强学堂的介绍后,觉得少讲了很多在《Head First Python》和《Python基础教程》中有的东西,于是借廖雪峰的博客进行进一步补充:http://www.liaoxuefeng.com...

Spring学习笔记2——高级特性

1.通过PropertyPlaceholderConfigurer在Spring中加载其他外部配置文件或者属性文件: 在很多javaEE工程中,Spring的角色非常重要,是一个管理其他模块和组件的...

【Python学习笔记】python高级特性:迭代器

【根据廖雪峰python教程整理】 一、迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list、tuple、dict、set、str等;...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)