Chinaunix首页 | 论坛 | 博客
  • 博客访问: 573831
  • 博文数量: 226
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-26 11:15
文章分类

全部博文(226)

文章存档

2011年(5)

2010年(64)

2009年(99)

2008年(37)

2007年(21)

我的朋友

分类: LINUX

2009-07-08 22:41:49

1 python对象

   构造任何了类型的值都是一个对象,所有的python对象有三个特性:
身份,类型,值;
   身份: 每个对象都有一个唯一的身份标识自己,任何身份可以使用内建函数id()来得到,这个值可以认为是对象的内存地址。

   类型:对象的类型决定了该对象可以保存什么类型的值,可以进行说明样的操作,以及遵循什么样的法则,通过type来查看python类型。python中的类型也是对象,所以type返回的是对象不是简单的字符串。
   值:对象表示的数据项。
   三个特性在对象创建的时候就被赋值了。除了值,其他的都是可读的。
对象的值是否可变称为对象的可改变性,只要一个特性没有被销毁这个特性就一直存在。

>>> i=123
>>> id(i)
3955040
>>> print id(i)
3955040
>>> type(i)

>>>

 对象有属性,值或相关可执行代码,比如方法。python用点号标记来访问属性。

2 标准类型:

  • 数字
  • 整型
  • 布尔型
  • 长整型
  • 浮点型
  • 复数型
  • 字符串
  • 列表
  • 元组
  • 字典
  其他内建类型:类型, Null对象(None) ,文件,集合或固定集合,函数或方法,模块,类


3 类型对象和type类型对象


类型对象的类型:
>>> type(type(43))


python有一个特殊的类型,称为Null对象或NoneType,它只有一个值就是None。
不支持任何运算,没有任何内建的方法。
 None没有什么有用属性,它的布尔值为False。

核心笔记:布尔值
所有的标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔True或False值。空对象或值为零的任何数字或Null对象None的布尔值都是False。

下列对象的布尔值为False。
None
False(布尔类型)
所有值为零的数
0(整型)
0.0(浮点型)
0L(长整型)
0.0+0.0j(复数)
“”空字符串
[]空列表
()空元组
{}空字典
值不是上面值都是True。用户创建类型如果定义了nonzero(__nonzero__())或length(__len__()))且值为0,那么它们的值为False。

内部类型:
代码-----代码对象指编译过的python源代码片段,它是可执行对象。通过调用内建函数complie()可以得到代码对象,代码对象可以被exec命令或eval()内建函数来执行。它是函数的属性,函数对象还包括函数名,文档字符串,默认参数,以及全局命名空间。

帧:
帧对象表示python的执行栈帧。帧对象包含python解释器在运行时候所需要信息,它的属性包括指向向一个帧的链接,正在执行的代码对象,本地以及全局名字字典以及当前指令;每次函数调用都产生一个帧对象。

跟踪记录:
异常发生时候,一个包含对异常的栈跟踪记录的对象被创建。

切片:当python使用切片语法时候就会产生切片对象。

省略:省略对象用于扩展的切片语法中,起记号作用。

Xrange:内建的xrange()会产生一个xrange对象,它可以节省内存或产生range无法完成的超大数据集合。


4 运算符


 比较运算符判断同类型的对象是否相等,所有内建类型都支持比较运算。
 多个比较运算符可以再同一行进行,求值的顺序为从左到右。

 >>> 3<4<7
  True

对象的身份比较:

a is b或 id(a)== id(b)

a= b =1.3

>>> a=b=1.3
>>> print a is b
True
>>> a =1
>>> b = 2-1
>>> print a is b
True
>>> c = 1.3
>>> d=2.3 -1
>>> print c is d
False
>>> p = 2
>>> q =3-2
>>> print p is q
False


核心提示:
整数对象和字符串对象是不可变对象,python会高效的缓存他们。这会造成我们认为python应该创建新对象的时,它却没有。
>>> m=1
>>> n=1
>>> id(m)
3954520
>>> id(n)
3954520


>>> x=1.0
>>> y=1.0
>>> id(x)
29789512
>>> id(y)
29789160


布尔类型
 
布尔运算符号:and or 和not ;not优先级最高,and,or的运算符优先级更低些。


标准类型内建函数:

cmp(),repr(),str(),type(),和等同于repr()函数的单反引号。

cmp(obj1,obj2)比较obj1 和obj2 ,根据比较结果返回整数i,i<0 if obj10 if obj1>obj2 i==0 if obj1==obj2

repr(obj)或`obj`返回一个对象的字符串表示
str(ob)返回对象适合可读性好的字符串表示
type(obj)得到一个对象的类型,并返回相应type对象。

repr()返回官方的字符串表示,可以通过eval()来重建该对象。

核心笔记:为什么我们有了repr还需要··?因为某些场合用函数比运算符更合适,另一x**y和pow(x**y)功能相同,都是x的y次方。


类型工厂,产生对象:
int() long(),float(),complex()
str() unicode(),basestring()
list() ,tuple()
type()

dict()
 bool()
set()
frozenset()
object()
classmethod()
staticmethod()
super()
property()
file()

--------------------------
"基本" 这些类型是python提供的标准或核心类型
“内建” 是由于这些类型是python默认提供的
“数据” 因为他们一般用于数据存储
“对象” 因为对象是数据和功能的默认抽象
“原始” 因为这些类型提供的是最底层的粒度数据存储。
“类型” 因为他们就是数据类型。

 存储模型:
 分类:
标量、原子类型:数值,字符串
容器类型: 列表,元组,字典

更新模型:
可变类型,列表,字典
不可变类型:数字,字符串,元组

>>> x='pytoh'
>>> id(x)
31831008
>>> x='imaiss'
>>> id(x)
32795936


>>> i=1
>>> id(i)
3954520
>>> i=10
>>> id(i)
3954412

>>> alist=['1','2']
>>> id(alist)
34258896
>>> alist.append('ppp')
>>> id(alist)
34258896


访问模型:
顺序:字符串,列表,元组
直接存取:数字
映射:字典


不支持的类型:
char或byte
可以用字符串表示字符或8比特整数
指针无,一切都是指针、

如果需要高精度的数字,可以采用Decimal类,必须导入decimal模块。






117页










  
阅读(479) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~