Python函数高级特性

切片(截取元素,可操作list,tuple,string)
L = list(range(100))  # [0,1,2,3,...,99]
L[0:10] = L[:10]  # 截取前10个数 [0,1,2,...,9]
L[-10:]  # 截取后10个数    [90,91,92,...,99]
L[10:20]  # 截取10-20位置的元素 [10,11,12,13,...,19]
L[:10:2]  # 前10个数,每两个取一个 [0,2,4,6,8]
L[::5]  # 所有数,每5个取1个 [0,5,10,...,95]
L[:]  # 复制原数组
迭代 for...in...
  • 迭代dict
d = {'a': 1, 'b': 2, 'c': 3}
# 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()
  • 迭代list
for i, value in enumerate(["a", "b", "c"]):
    print(i, value)  # 迭代list需要用到enumerate函数
# 0 a
# 1 b
# 2 c
列表生成式
list(range(1,11))   #生成[1,2,3,..,10]
[x*x for x in range(1,11)] #生成[1*1,2*2,3*3,...,10*10]
# 列表生成式跟if判断
[x*x for x in range(1,11) if x%2 ==0] #生成[2*2,4*4,6*6,8*8,10*10]
# 双层循环生成全排列
[x+y for x in "ABC" for y in "XYZ"] #生成['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器:genterator(一边循环一边计算,如果一个函数中包含yield关键字,则该函数就是一个generator)
  • 把列表生成式的[]该为()即可
g = (x*x for x in range(1,10))
# 调用方法:
next(g) #每次调用next()方法来获取元素,每次只能获取一个
for n in g: #for循环内部会不断调用next()方法
    print(n)
  • 使用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'
迭代器
  • 可直接作用于for循环的对象 Iterable
from collections import Iterable
isinstance([], Iterable)  #True 使用isinstance()来判断是否是Iterable对象
  • 可被next()调用并不断返回下一个值的对象 Iterator
from collections import Iterator
isinstance((x for x in range(10)), Iterator)    #使用isinstance()来判断是否是Iterator对象,Iterator对象是惰性求值,只有在需要时才会求值

 

 

 

posted @ 2017-12-20 15:44  枫叶布  阅读(266)  评论(0编辑  收藏  举报