Chinaunix首页 | 论坛 | 博客

分类: Python/Ruby

2014-02-18 00:05:36

    什么是内置?个人理解:内置指的是python中的__builtin__模块,凡是该模块内的函数则称之为内置函数,凡是该模块内的class则称之为内置数据类型。查看__builtin__模块的内容与查看其它模块的内容一样:import 和 dir。
   例如:help(list)  :   Help on class list in module __builtin__:
   例如:help(sum) : Help on built-in function sum in module __builtin__:   即,在help输出的开头就表明了该数据类型或着函数属于哪个模块。

    >>> l = [ x  for  x  in  dir ( __builtin__ ) if str( getattr( __builtin__,  x ).__class__).find( "\'type\'" )  !=  -1 and str( getattr (__builtin__,  x ).__module__ ) == '__builtin__' ]
    >>> l
['basestring', 'bool', 'buffer', 'bytearray', 'bytes', 'classmethod', 'complex', 'dict', 'enumerate', 'file', 'float', 'frozenset', 'int', 'list', 'long', 'memoryview', 'object', 'property', 'reversed', 'set', 'slice', 'staticmethod', 'str', 'super', 'tuple', 'type', 'unicode', 'xrange']
    上面python语句的输出就是__builtin__模块内的所有内置数据类型,判定方法就是首先它应该是一个数据类型,其次它存在于__builtin__模块内。
注意:dir(__builtin__)输出的函数或数据类型有可能不是__builtin__模块内的,不知道为什么
    从上面的输出我们分析最常用的内置数据类型。
    必备类型:布尔型(bool)、整数(int)、长整数(long)、浮点数(float)、复数(complex).
                       bool类型的变量只能取值True / False. (注意大小写)
                       a=10 或 a = int("10").  当a的值大到一定程度,它的数据类型会自动变成长整型。另外,当a的值变小了以后,又恢复成了int类型.
                       b = long(10).      如果定义时就是long类型,那么即便吧b=10, type(b) =  .
                       复数暂不考虑.
                       需要注意的地方:1、Python 3中已将整数和长整数这两种类型统一为一种类型,但是在调用isinstance时还是有区别;2、长整数表示的整数范围只受内存大小的限制;3、python不存在字符数据类型,即char.
   
前面介绍的数据类型几乎是每种语言必备的,接下来介绍的数据类型则是python的自己特色。
列表:
        定义:a = [1,2,3,4,5,6].
        索引:a[0] == 1,  a[-1] == 6

        分片:a[1:] == [2,3,4,5,6] ,  a[:2] == [1,2] , a[:] == [1,2,3,4,5,6] ,  a[1,-1] == [2,3,4,5]  有几点需要注意:1、分片操作产生了一个新的列表; 2、分片是对原先列表的一个拷贝,我称之为浅拷贝,例如当a=[ [1,2,3], 4, 5, 6 ], 元素a[0]是一个可变的数据类型,那么b=a[:]只是获得了元素的引用,b[0][0] = 10的操作也会影响到原先的列表a;  3、a[3:2] 会产生一个空的列表(不要认为这是异常),a[0:100]相当于a[:], (因为a本就没有那么多的元素 )。
        增加元素: a.append(7), 这是增加一个元素, a.extend([7,8,9]),如果是a.append([7,8,9])则会增加一个元素,类型为列表[7,8,9];  如果是extend方法,那么就是将列表中的元素统统加入到列表a中,a=[1,2,3,4,5,6,7,8,9]。
        删除元素:以下标为索引删除元素的方法:del a[i],  以value为索引删除元素的方法是remove: a.remove(value) 等价于 del a[ a.index(value) ], 所以value的值不存在同样会引发异常。
        搜索元素: a.index(1) == 0, 注意:index返回的是value首次在列表中出现的位置;如果value的值在列表中不存在,则会引发异常:ValueError: 100 is not in list ;  如果你觉得这样太暴力的话,先使用 if value in a :  判断value是否存在与列表中。
        运算符:a+[7,8,9]  或者  a += [7,8,9] 。
        映射list:python提供了一种紧凑的语法,将一个list中的元素映射为一个新的list。例如:[ elem*2 for elem in li ],   [ "%s=%s" % (k, v) for k, v in params.items()  ] 它应用了格式化字符串、多变量赋值和list映射三种技巧
        过滤list:它一般与映射list一起使用,方法是:[ x for x in l if filter-expression] , 只有当if语句返回值为Ture时,元素才会被映射到新的list中。多个过滤表达式如何粘在一起?用and or .  与C中的概念一致,且是从左向右解析。需要注意的是,‘a’ and ‘b’ 在C中返回是bool类型的值,而在Python中返回的是‘b’。具体不解释。

元组:
        定义:a = (1,2,3,4,5,6).
        索引:a[0] == 1,  a[-1] == 6

        分片:与列表一致。
        
注意:1、元组是不可变对象,你不能向元组增加元素、删除元素。2、但是能搜索元素,也可以使用in来查看元素是否存在于元组中。3、+和+=方法是可以使用的 ,因为 a + (4,5,6)的操作并为改变元组a的内容,而是生成了一个新的元组;同理, += 只是将变量引用到新的元组上,原先的元组可能因为不再被引用而被python回收。

字符串:
        字符串   a="helloworld"(一定要用双引号或单引号,与shell不同)。 字符串的编码问题, 这里面是关于字符串的一个讲解,有时间再看.  则是《深入Python 3》这本书的电子版本。
阅读(642) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

yandongxiao2014-03-02 18:31:07

字符串类型,更像是元组。