什么是内置?个人理解:内置指的是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》这本书的电子版本。
阅读(676) | 评论(1) | 转发(0) |