slice
在python中,list(“[1,2,3]”)和str(“123”)提供了slice的功能。可以随意取出这些数据结构中的一段数据。
slice的语法为l[start:end:step],其中l表示一个list或者str,
start和end表示你要取出的子串的开始下标和截止下标的下一个。step表示取元素的步长,其缺省值为1。。当step>0时,start和end的缺省值分别为0,
len(l)。当step < 0时,start的缺省值分别为len(l)-1, end的缺省值不知道是什么,但是它会使得第一个元素也包含在结果列表中。
如
- l[1:6]表示取下标为1…5的子串
- l[1:6:2]表示取下标分别为1,1+2,1+2+2的元素
- l[6:1:-2]表示取下标为6, 6-2, 6-2-2的元素
- l[::-1]表示原值的逆序
可以将slice看做下面的函数,不妨设l为list1
2
3
4
5
6
7
8def slice(l, start, end, step):
res = []
i = start
while i < end:
res.append(l[i])
i += step
return res
list comprehesion
list comprehesion通常用来初始化list。它的语法是 [expr for iter_var in iterable], [expr for iter_var in iterable if cond_expr]。
如1
2
3l = [i*i for i in range(1,5)] // l = [1,4,9,16], 即1...4中的平方数
l = [i*i for i in range(1,5) if i%2==0] // l = [4,9], 即1...4中偶数的平方数
可以把[expr for iter_var in iterable if cond_expr]看做下面的函数1
2def list_comprehesion(lambda iter_var:expr, iter_var, iterable, lambda iter_var:cond_expr):
return map(lambda iter_var: expr, filter(lambda iter_var:cond_expr, iterable))
generator
yield
详见3. (译)Python关键字yield的解释(stackoverflow)
变长参数(实参或形参前加上*或**)
在函数定义时使用,详见Python在函数中使用和*接收元组和列表
在函数调用时使用,详见Python的zip函数
decorator
大致是说,代码1
2
3
def func():
pass
会被解释器翻译为1
func = decorator(func)