码迷,mamicode.com
首页 > 编程语言 > 详细

Python高级特性——学习笔记

时间:2016-04-22 20:08:34      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

Python中非常有用的高级特性,1行代码能实现的功能,决不写5行代码。请始终牢记,代码越少,开发效率越高。

1、切片slice。L = [1, 2, 3, 4, 5]
L[0:3]=[1,2,3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引012,正好是3个元素。 如果第一个索引是0,还可以省略
倒数切片L[-2:]=[4,5]从倒数第二个数 到 最后一个数
L = list(range(100))# 创建一个0-99的数列L
L[:10:2]# 前10个数,每两个取一个
L[::5]# 所有数,每5个取一个

iterable.[::-1] # 字符串翻转。非常有用!!

tuple也是一种list,只是不可变,支持切片操作,操作的结果仍是tuple
字符串‘xxx‘也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串,相当于其他编程语言里的字符串截取函数 substring等
2、Python的for循环抽象程度要高于Java的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代 ,比如dict就可以迭代,字符串也可迭代。
for key in d: #迭代key
for value in d.values():#迭代value
for k, v in d.items():#key,value都迭代
for ch in 'ABC': #字符串,分别打印A,B,C</span>
3、 判断一个对象是可迭代对象,方法是通过collections模块的Iterable类型判断:
技术分享
4、 Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:
技术分享
5、 for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:
技术分享

6、列表生成式: Python内置的非常简单却强大的可以用来创建list的生成式
生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))
技术分享
筛选出仅偶数的平方
技术分享
字符串的拼接用‘+’
技术分享
列出当前目录下的所有文件和目录名
>>> import os # 导入os模块,模块的概念后面讲到
>>> [d for d in os.listdir(‘.‘)] # os.listdir可以列出文件和目录,路径可以修改如e:/sublime/python
[‘.emacs.d‘, ‘.ssh‘, ‘.Trash‘, ‘Adlm‘, ‘Applications‘]
最后把一个list中所有的字符串变成小写:
>>> L = [‘Hello‘, ‘World‘, ‘IBM‘, ‘Apple‘]
>>> [s.lower() for s in L]
[‘hello‘, ‘world‘, ‘ibm‘, ‘apple‘]
for 前面的表达式就是所需要做的操作,对迭代中的每一个item进行该操作,if判断进行筛选,写在列表生成式的最后,最后返回操作后的结果。

7、生成器generator:解决需要存储列表所有元素的内存难题, 在循环的过程中不断推算出后续的元素, 不必创建完整的list,从而节省大量的空间。
创建generator的方法:
  • 列表生成式的[]改成(),next()函数获取generator的每一个元素,其实一般很少用该函数,用for循环会更加方便。
    >>> g = (x * x for x in range(10))
    >>> for n in g:
    ...     print(n)
  • 函数定义中使用yield关键字:会中断的print
生成斐波那契数列无法用列表生成式来完成,因为列表生成式只能操作当前迭代的元素,而无法操作列表中的两个元素。可以用函数打印出来,并储存前n个数的列表,考虑利用生成器:
def fib(max):
    n, a, b = 0, 0, 1
         while n < max:
                 yield b     # 函数打印时为print(b)
        a, b = b, a + b
        n = n + 1
         return ‘done‘
获取前max个元素用for也是非常方便,因为generator是可以迭代的
>>> for n in fib(6):
...     print(n)

技术分享
def triangles():
    L=[1]
    yield L
    while True:
        L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]
        yield L

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

8、迭代器对象Iterator
凡是可作用于for循环的对象都是Iterable类型(可迭代);
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
迭代器Iterator 都是可迭代的Iterable
>>> isinstance(‘abc‘, Iterator)
False
>>> isinstance(iter(‘abc‘), Iterator)
True


声明:学习廖雪峰的Python教程——Python高级特性章节后的学习笔记,感谢Micheal Liao.

Python高级特性——学习笔记

标签:

原文地址:http://blog.csdn.net/flyfish111222/article/details/51213293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!