zoukankan      html  css  js  c++  java
  • 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函数

     

  • 相关阅读:
    ios MD5大小写加密
    清理xcode缓存
    iOS 动画(基于Lottie封装)
    wkWebView 的一些问题
    ios 画板的使用
    redis安装和使用
    memcached 配置与安装
    mysql主从同步配置
    ansible playbook使用
    ubuntu18创建rc.local
  • 原文地址:https://www.cnblogs.com/anne32184/p/13305884.html
Copyright © 2011-2022 走看看