高级特性
切片:前10个数,每两个取一个: L[:10:2]:[0, 2, 4, 6, 8]
可迭代对象的判断: isinstance(‘abc’, Iterable)
list变成索引-元素对:for i, value in enumerate([‘A’, ‘B’, ‘C’]):print(i, value)
列表生成式:一行语句生成list:[x * x for x in range(1, 11)]
生成器:一边循环一边计算的机制,称为生成器:generator。
第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:g = (x * x for x in range(10))
另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
f = fib(6)
f
定义默认参数要牢记一点:默认参数必须指向不变对象!
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
Python函数返回值是单一值,元组
函数式编程
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
reduce(fn, map(char2num, ‘13579’))
13579
reduce(lambda x, y: x * 10 + y, map(char2num, s))
list(filter(not_empty, [‘A’, ‘’, ‘B’, None, ‘C’, ‘ ‘]))
sorted([36, 5, -12, 9, -21], key=abs)
sorted([‘bob’, ‘about’, ‘Zoo’, ‘Credit’], key=str.lower, reverse=True)
函数作为返回值
返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
匿名函数:list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
装饰器:含有参数装饰器1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23import functools
def log(func):