写这篇文章的原因完全是为了督促自己每天晚上看完两章《Dive Into Python》这本书,因此,很多内容都是摘抄自原书的翻译版或者是自己瞎想,于是就顺带着记录了下来。此前已经看完前两章,是关于Python的由来以及编码格式,安装等问题。接下来,是Python的数据结构。
字典类型(Dictionary)
d = {"server":"mpilgrim", "database":"master"}
引用方式为:
d["server"]
注意,在Javascript等脚本语言中,对字典类型(Json格式)的引用方式一般有属性引用和‘.’号引用两种方式,但在Python中,对字典类型的数据对象的引用方式只有这一种。
列表类型(List)
li = ["a", "b", "mpilgrim", "z", "example"]
引用方式:
li[index]
通过下标的方式进行检索。
另外,List支持切片模式,我们甚至可以从负数开始进行检索。
还有一个比较重要的小插曲:
元组类型(Tuple)
Tuple 是不可变的 list。一旦创建了一个 tuple,就不能以任何方式改变它。
您不能向 tuple 增加元素。Tuple 没有 append 或 extend 方法。 |
|
您不能从 tuple 删除元素。Tuple 没有 remove 或 pop 方法。 |
|
您不能在 tuple 中查找元素。Tuple 没有 index 方法。 |
|
然而,您可以使用 in 来查看一个元素是否存在于 tuple 中。 |
k = "uid"
v = "sa"
"%s=%s" % (k, v)
注意 (k, v) 是一个 tuple。我说过它们对某些东西有用。
您可能一直在想,做了这么多工作只不过是为了做简单的字符串连接。您想的不错,只不过字符串格式化不只是连接。它甚至不仅仅是格式化。它也是强制类型转换。
Python对List有强大的支持,也因为如此,才使得List成为Python中应用最多的数据类型,关键是注意它们的内存分配方式
>>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li]
[2, 18, 16, 8] >>> li
[1, 9, 8, 4] >>> li = [elem*2 for elem in li]
>>> li [2, 18, 16, 8]
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret" \
}
注意代码的缩进方式!
type,str,和内置函数
平时使用type的机会比较多,对于Python的数据类型
>>> a = 10 >>> type(a) <type 'int'> >>> b = "hello,world" >>> type(b) <type 'str'> >>> c = {'key':'value'} >>> type(c) <type 'dict'> >>> d =[1,2,3] >>> type(d) <type 'list'> >>> e = (12,3,4,5) >>> type(e) <type 'tuple'> >>> f=0.02 >>> type(f) <type 'float'> >>> def fun():print 'hello' >>> type(fun) <type 'function'> >>> g = a = set('abracadabra') >>> type(g) <type 'set'> >>> g set(['a', 'r', 'b', 'c', 'd']) >>> type(odbchelper) <type 'module'>
目前想到的就这几种数据结构,当然,每种数据结构下面都封装了若干的方法可以调用
还有漏掉一个
>>> type(True)
<type 'bool'>
原来要求首字符是区分大小写的!
type 可以接收任何东西作为参数并返回它的数据类型。整型、字符串、列表、字典、元组、函数、类、模块,甚至类型对象都可以作为参数被 type 函数接受。
type 可以接收变量作为参数,并返回它的数据类型。
type 还可以作用于模块。
你可以使用 types 模块中的常量来进行对象类型的比较。这就是 info 函数所做的,很快你就会看到
str内置函数用于将其他的数据类型强制转换为字符串
对于简单的数据类型比如整型,你可以预料到 str 的正常工作,因为几乎每种语言都有一个将整型转化为字符串的函数。
str 还允许作用于模块。注意模块的字符串形式表示包含了模块在磁盘上的路径名
str 的一个细小但重要的行为是它可以作用于 None,None 是 Python 的 null 值。这个调用返回字符串 'None'。你将会使用这一点来改进你的 info 函数,这一点你很快就会看到。
info 函数的核心是强大的 dir 函数。dir 函数返回任意对象的属性和方法列表,包括模块对象、函数对象、字符串对象、列表对象、字典对象 …… 相当多的东西。
>>> a = {'key':'value'} >>> a {'key': 'value'} >>> dir(a) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
我们在Python自带的编译器GUI上弹出某个对象下面的方法反映会比较慢,可以通过调用dir这个函数来实现 可以发现,每个对象的下面,即使是最简单的int类型下面都有很多函数
内置函数
type、str、dir 和其它的 Python 内置函数都归组到了 __builtin__ (前后分别是双下划线) 这个特殊的模块中。如果有帮助的话,你可以认为 Python 在启动时自动执行了 from __builtin__ import *,此语句将所有的 “内置” 函数导入该命名空间,所以在这个命名空间中可以直接使用这些内置函数。
上面就是Python的内置函数(2.7版本),有兴趣可以看一下。类似于将所有的d对象字符串化的str函数,还有Int函数,dict函数。都是强制类型转换函数
getattr方法
getattr(object, name[, default])
Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.