IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    python 列表解析 匿名函数 对象概念

    Xiang Chao (cloudaice@163.com)发表于 2012-02-10 19:52:00
    love 0
    • python列表解析

    看一段代码

    ll=[]
    L=[1,2,3,4,5]
    for i in L:
    ll.append(i+5)
    

    这段代码表达的意思非常简单,将一个列表中的每一项值都加上5,然后再得到一个列表。 同时,我们可以有另外一种写法:

    ll=[i+5 for i in L]
    

    这两段程序看上去实现的功能是一样的,表面上,仅仅是第二段程序实现的比较简单。然而在python代码执行的时候,第二段代码执行速度比前一段代码的速度快一倍。因为python的迭代在解释器内部是以C的速度运行的。

    • zip函数使用

    很多时候,我们有两个列表,其中一个列表的每一个值和另一个列表的值相对应,因此,很自然,我们就希望可以建立一个这样对应的字典。 zip()函数,可以将两个列表,装成相应的元组对列表。

        key = ['num1','num2','num3']
        value = [1,3,5]
        >>>list(zip(key,value))
        [('num1',1),('num2',3),('num3',5)]
        >>>dict(zip(key,value))
        {'num1':1,'num2':3,'num3':5}
    

    很简单就可以把两个列表转成对应的字典

    其实对于zip函数,不仅仅对于列表有这样的功能,对于字符窜和元组也同样有这样的作用,并且可以对多个列表, 元组,序列也是同样起作用的,当有多个序列的长度不一样的时候,以最小长度 为准,使用zip的时候再加上for循环操作往往可以达到很高的效率

    zip-use

    • map

    看一段例子

    map1

    这里我们可以看到,使用map可以将我们上面说的不等成序列(包括字符窜)补上None. 其实map有更加重要的用处。 刚才我们讲过列表解析,现在又有一种可以实现相似功能的方法,

    def func(x):
        return x+10
    a = [1,2,3]
    ll=list(map(func,a))
    

    上面代码的功能就是将列表中的每一个数,执行一下func函数,也就是加上5。 其实map功能,理解起来非常容易,第一个参数就是一个函数,然后使用后面的可迭代的类型每个元素作为参数, 进行函数调用,最后返回一个序列,同样后面的参数取决去,函数的参数个数。

    • lambda表达式

    lanbda表达式也叫做匿名函数,其实和函数在功能上实现是一样的,有函数有两点不用:

    • lambda的主体只是一个表达式,因此和函数相比有一定的限制性
    • lambda没有名字,其本身就是函数的名字

    下面用代码演示一下

    "用函数实现"
    def func(x,y,z):
        return x+y+z
    sum = func(1,2,3)
    "用lambda实现"
    f= lambda x,y,z:x+y+z
    sum=f(1,2,3)
    

    上面两段代码实现的功能都是获得三个数相加的和。从这里可以看出,函数可以实现lambda表达式可以实现的所有功能 只是lanbda表达式省了几行代码。很多人觉得lambda表达式没什么特别意义,但是我们现在回过去看看刚才说的 map使用方式。再看看下面用lambda表达式实现的方式,结果自然知晓。

    a = [1,2,3]
    ll=list(map(lanbda x:x+5,a))
    

    显然lambda表达式和map联合起来使用非常漂亮

    • python对象的概念

    在这里稍微讲讲我理解的python对象的概念。

    python中的对象概念要和变量的概念区别开来。我们知道在使用一个变量的时候是不用像C语言那样子,先要声明的。 而是直接拿过来就是可以使用的。其实这里面一句话就可以解决,python中的类型属于对象,不属于变量。 下面用自己画的一张图表示一下:

    变量一 = 对象一
    

    py_object1

    变量二 = 变量一
    

    py_object2

    变量二 = 对象二
    

    py_object3



沪ICP备19023445号-2号
友情链接