zoukankan      html  css  js  c++  java
  • python高级函数六剑客

    第一位:lambda

    1.lambda语句被用来创建新的函数对象,并且在运行时返回它们。

    2.Python使用lambda关键字来创建匿名函数。这种函数得名于省略了用 def声明函数的标准步骤。

    3.lambda只是一个表达式,函数体比def简单很多

    4.lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表 达式中封装有限的逻辑进去。

    5,lambda函数拥有自己的名字空间,且不能访问自由参数列表之外全局名 字空间里的参数。

    6.虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数, 后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    7.lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def 则会把函数对象赋值给一个变量(函数名)。

    8.像if或for或print等语句不能用于lambda中。

    9.lambda函数不能共享给别的程序调用,def定义的函数可以

    举个栗子:

    1.单个参数

    g = lambda x:x+1

    print g(1)

    print g(2)

    2.多个参数

    g = lambda x, y, z : (x + y) ** z

    print g(1,2,3)

    3.

    lambda表达式会返回一个函数对象, 如果没有变量接受这个返回值,它很快 就会被丢弃,也正是由于lambda只是 一个表达式,所以它可以直接作为list、 dict等的成员。如:

    list_a = [lambda a: a**3, lambda b: b**3]

    print (list_a[0])

    g = list_a[0]

    print g(2)

    第二位:map

    将每个列表元素或字符串都执行某个函数

    map的函数操作方法:它将每个字符串或者列表元素,应用某个函数方法, 结果返回列表。 当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新 的seq。

    让我们来看一下只有一个seq的时候,map()函数是如何工作的

    举个栗子:

    #求两个数的和

    res = map(lambda x , y : x + y, [2,4,6],[3,2,1])

    for i in res:print(i)

    map无法处理对应位置操作数类型不一致的情况,这种情况都会报类 型错误,但是对于对应位置长度不一致的情况,可以处理,对应到多少 就处理多少。

    #当对应位置的数据类型不一致时

    res = map(lambda x , y : (x ** y, x + y), [2,4,6],[3,2,'a'])

    for i in res:print(i)

    第三位:filter

    filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个 序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最 终一次性返回过滤后的结果。

    filter()函数有两个参数:

    第一个,自定函数名,必须的 第二个,需要过滤的列,也是必须的

    #coding=utf-8

    #定义大于5小于10的函数

    def guolvhanshu(num):

    if num>5 and num<10:

    return num

    0

    #定义一个序列

    seq=(12,50,8,17,65,14,9,6,14,5)

    #使用filter函数

    result=filter(guolvhanshu,seq)

    #(8,9,6)

    print result

    第四位:reduce

    reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组 等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一 个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第 三个数据用func()函数运算,最后得到一个结果。

    1.

    from functools import reduce

    lst = [1,2,3,4,5]

    print reduce(lambda x,y:x+y,lst)

    #这种方式用lambda表示当做参数,因为没有提供reduce的第三个参 数,所以第一次执行时x=1,y=2,第二次x=1+2,y=3,即列表的第三个 元素

    2.

    from functools import reduce lst=[1,2,3,4] print(reduce(lambda x,y: x+y, lst,5)) # 5是初始值,也可以理解为第三个参数 # 计算呢过程 -->5+1=6 -->6+2=8 -->8+3=11 -->11+4=15

    第五位:推导列表

    列表推导式提供了从序列创建列表的简单途径。

    通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

    每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

    代码示例1:

    listone = [2, 3, 4]

    listtwo = [2*i for i in listone if i > 2]

    print listtwo

    代码示例2:

    print [m + n for m in 'ABC' for n in 'XYZ']

    代码示例3:

    d = {'x': 'A', 'y': 'B', 'z': 'C' }

    print ([k + '=' + v for k, v in d.items()] )

    代码示例4:

    L = ['Hello', 'World', 'IBM', 'Apple']

    print [s.lower() for s in L]

    第六位:切片

    切片--对序列有效(列表,元组,字符串)

    序列:它们的成员是有序排列的,可以通过下标偏移量访问到它的一个或几个成员

    >>> s="abcdefg"[0]

    >>> "abcdefg"[0]

    'a'

    >>> "abcdefg"[1]

    'b'

    >>> "abcdefg"[2]

    'c'

    >>> "abcdefg"[-1]

    'g'

    >>> "abcdefg"[-2]

    'f'

    >>> "abcdefg"[-3]

    'e'

    >>> "abcdefg"[-len("abcdefg")]

    'a'

    >>> a="12345"

    >>> a[::2]

    '135'

    全量复制:

    >>> "abcdefg"[:]

    'abcdefg'
    ————————————————
    原文链接:https://blog.csdn.net/qq_30758629/article/details/95924134

  • 相关阅读:
    java8 Date/Time API 新的日期处理工具
    java8 Lambda 表达式和函数式接口快速理解
    java8 新特性精心整理(全)
    Git 从入门到熟练|不敢说精通
    C# Color 列表
    自动控制原理6
    forfiles命令详解
    详解SQLEXPR32_x86_CHS.exe、SQLEXPR_x86_CHS.exe、SQLEXPR_x64_CHS.exe之间的区别
    power disiagner pdb
    vs 中大括号之间垂直虚线显示
  • 原文地址:https://www.cnblogs.com/wiki918/p/11943402.html
Copyright © 2011-2022 走看看