python六剑客
python六剑客是指:切片、推导列表、map映射函数、filter过滤器、reduce累积、lambda匿名函数
1、切片
对于序列来说,都可以使用切片。序列包括:字符串、列表和元组
语法
s[开始位置 :结束位置 : step]
- step步长 为正数表明切片操作时从左至右(即正向)访问序列s的元素,
为负数表明切片操作是从右至左(即反向)访问序列s的元素。
该参数省略时,默认为1。
- 开始位置为闭区间(包含该位置对应值),该参数省略时,从端点位置开始取值,至于是从左边还是右边开始,则由step的正负决定,为正从左边开始,为负从右边开始
- 结束位置为开区间(不包含位置对应值),该参数省略时,表示一直取到端点位置,至于是取到最左边还是最右边,也是由step的正负决定,为正取到最右边,为负取到最左边
- 切片不会产生越界
- 序列的序号是从0开始
实例:
1)字符串正向切片
2)字符串反向切片
3)列表和元组的切片与字符串同理
2、推导列表
列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表
语法
[表达式 + for语句 + 0个或多个for或if语句]
- 返回结果是一个新列表
- 各语句之间是嵌套关系,第一个for语句是最外层,依次往右进一层,最前面的表达式是最后一层
- 列表推导式就相当于for循环创建列表的简化版
- 表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们
实例
列表推导式代码简洁了,但是可读性稍差,如果推导式列表超过两行代码,则不建议使用,就要考虑用for循环了。
3、map函数
map() 会根据提供的函数对指定序列做映射
语法:
map(函数, 一个或多个序列)
- map()函数有两个参数,一个是函数,一个是序列,序列可为一个或多个
- 函数可以是内置函数,也可以自定义
- 序列可以是字符串、列表和元组
- 序列中的每一个元素去调用函数,返回包含每次 function 函数返回值的新列表
- python 2 返回列表,python3返回迭代器,查看结果可转换成list
实例:
1、字符串的map运算
>>> list(map(list,"abc"))
[['a'], ['b'], ['c']]
2、列表的map运算
>>> list(map(chr,[65,66,67,68]))
['A', 'B', 'C', 'D']
3、元组的map运算
>>> list(map(str,(1,2,3)))
['1', '2', '3']
4、自定义函数
>>> def upper_letter(l):
... if "a"<=l<="z":
... l=l.upper()
... return l
...
>>> list(map(upper_letter,["a","b","c"])) #使用自定义函数
['A', 'B', 'C']
5、使用lambda函数
>>> list(map(lambda x:x*2,[1,2,3,4]))
[2, 4, 6, 8]
6、使用多个序列
>>> list(map(lambda x,y:x+y,[1,2,3,4],[5,6,7,8]))
[6, 8, 10, 12]
7、统计一行英文句子,一共有多少个字母
>>> sum(list(map(lambda x:len(x),"I am a boy".split())))
7
4、filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
语法
filter (判断函数, 可迭代对象)
- 函数需要能判断True 或False
- 函数可以是内置函数,也可以自定义
- 序列可以是字符串、列表和元组
- 可迭代对象中的每一个对象传到函数中,函数使用这个参数返回值True,就会把这个值保留下来,否则就丢弃掉。
- python 2返回列表,python3返回迭代器,查看结果可转换成list
实例
1、 使用内置函数
>>> list(filter(bool,[0,1,"","null"]))
[1, 'null']
2、 自定义函数
>>> def is_odd(n):
... return n%2 == 1
...
>>> list(filter(is_odd,list(range(10))))
[1, 3, 5, 7, 9]
3、 使用lambad函数
>>> list(filter(lambda x:x>5,list(range(10))))
[6, 7, 8, 9]
4、一个英文句子,保留3个以上字母的单词
>>> list(filter(lambda x:len(x)>=3,"I am a good boy".split()))
['good', 'boy']
5、reduce函数
reduce() 函数会对参数序列中元素进行累积
语法:
reduce(两个参数的函数,可迭代对象)
- python3要使用reduce函数要先from functools import reduce
- 函数将可迭代对象中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
- 返回函数计算结果
实例
1、自定义函数:
>>> def add(x,y):
... return x+y
...
>>> from functools import reduce
>>> reduce(add,[1,2,3,4,5])
15
2、使用lambda函数
>>> from functools import reduce
>>> reduce(lambda x,y:x*y,[1,2,3,4,5])
120
6、lambda匿名函数
顾名思义,匿名函数就是没有名字的函数。使用lambda可以省去定义函数的过程,让代码更简洁。
语法
lambda 函数参数:函数体
- 函数体只能是一个表达式,既不能用for while 也不能用if。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
- 函数参数可以有多个,用逗号分隔。
四个用法
1、 将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数
例如,执行语句add=lambda x, y: x+y,定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。例如,执行add(1,2),输出为3。
2、 将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。
例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambda x:None。这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。例如,执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。
3、 将lambda函数作为其他函数的返回值,返回给调用者
函数的返回值也可以是函数。例如return lamb da x, y: x+y返回一个加法函数。这时,lambda函数实际上是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数。对应的,将包含嵌套函数的函数称之为外部函数。内部函数能够访问外部函数的局部变量,这个特性是闭包(Closure)编程的基础
4、 将lambda函数作为参数传递给其他函数。
部分Python内置函数接收函数作为参数。典型的此类内置函数有filter函数、sorted函数、map函数、reduce函数