Python:4.高级特性

2018-07-10  本文已影响8人  许瘦子来世

切片

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 切片
L = ['Mick', 'Tom', 'Sarah', 'Jack']
print(L[0:3]) # 从索引0开始取,直到索引3为止
# 第一个索引是0,还可以省略
print(L[:3])
# 取倒数元素
print(L[-2:])

r = list(range(100))
print(r[:10])
print(r[-10:])
print(r[10:20])
print(r[:10:2]) # 前10个数,每两个取1个
print(r[::5]) # 所有数,每5个取1个
print(r[:]) # 复制一个list

# tuple元祖切片操作
print((1,2,43,2,3,4)[:3])

# 字符串切片操作.Python没有针对字符串的截取函数,只需要切片操作即可
print('abcdefgh'[:3])

迭代

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from collections import Iterable

# 迭代:只要是可迭代对象,无论有无下标,都可以迭代

# 字典迭代
d = {'a':1, 'b':2, 'c':3}
# 默认情况下,dict迭代的是key
for key in d:
    print(key)
# 迭代value
for value in d.values():
    print(value)
# 迭代key和value
for k,v in d.items():
    print(k,v)

# 字符串迭代
for ch in 'ABVC':
    print(ch)

# 判断一个对象是否是可迭代对象
'''
1. 通过collections模块的Iterable
'''
print(isinstance('abc',Iterable))

# 下标循环 enumerate函数,可以把list变成索引-元素对
for i,value in enumerate(['a','b','c']):
    print(i,value)

for x,y in [(1,2),(3,4),(5,6)]:
    print(x,y)

列表生成式

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os

# 列表生成式:list comprehensions

# 生成[1*1, 2*2, 3*3, ... ,10x10]
a = [x * x for x in range(1,11)]
print(a)
# for 循环后还可以加上if判断,这样就可以筛选出仅偶数的平方
b = [x * x for x in range(1,11) if x % 2 == 0]
print(b)
# 两层循环,生成全排列
c = [m + n for m in 'ABC' for n in 'XYZ']
print(c)

# 列出当前目录下的所有文件和目录名
d = [x for x in os.listdir('.')]
print(d)

# 使用两个变量来生成list
e = {'x':'A', 'y':'B', 'z':'C'}
f = [k + '=' + v for k,v in e.items()]
print(f)

# 将list中所有的字符串变成小写
g = ['Hello', 'World', 'IBM', 'Apple']
h = [s.lower() for s in g]
print(h)

生成器

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 生成器 generator:一边循环一边计算的机制
'''
1. 与列表生成式的区别:将[]改成()
2. 通过next()函数获得generator下一个返回值
'''
a = (x * x for x in range(10))
for b in a:
    print(b)

# 如果一个函数定义中包含了yield关键字,就是一个generator函数
'''
1. 在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
'''
def fib(max):
    n,a,b = 0,0,1
    while n < max :
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

c = fib(10)
for d in c :
    print(d)
# 用for循环调用generator时,发现拿不到generator的return语句的返回值
# 要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中
d = fib(12)
while True:
    try:
        x = next(d)
        print('d:',x)
    except StopIteration as e:
        print('Generator return value:',e.value)
        break

迭代器

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 迭代器
'''
可迭代对象:Iterable
1. 用isinstance()判断一个对象是否是Iterable对象
2. list, tuple, dict, set, str等

迭代器:Iterator
1. 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
2. 可以使用isinstance()判断一个对象是否是Iterator对象
3. 生成器
4. 迭代器对象表示的是一种数据流,可以把这个流看做是一个有序序列,却不知道序列长度
5. 迭代器的计算是惰性的
6. 可以表示一个无限大的数据流,例如全体自然数
'''
from collections import Iterator

# 判断是否是迭代器
print(isinstance((x for x in range(10)),Iterator))

# 将可迭代对象转换成迭代器,用iter()函数
print(isinstance(iter('abc'),Iterator))

参考

  1. 廖雪峰的Python教程
上一篇 下一篇

猜你喜欢

热点阅读