Python高级特性——学习笔记

来源:互联网 发布:淘宝自定义付款方式 编辑:程序博客网 时间:2024/06/11 07:01
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的数列LL[: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: #迭代keyfor value in d.values():#迭代valuefor 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.
0 0
原创粉丝点击