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函数

 

 

posted @ 2020-07-15 15:43  anne的夏天  阅读(262)  评论(0编辑  收藏  举报