Go Snail

python中的概念

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为list

1
2
3
4
5
6
7
8
def 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
3
l = [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
2
def 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

详见Python修饰器的函数式编程

大致是说,代码

1
2
3
@decorator
def func():
pass

会被解释器翻译为

1
func = decorator(func)