`
linvar
  • 浏览: 254222 次
  • 性别: Icon_minigender_1
  • 来自: 未定
社区版块
存档分类
最新评论

python2.x学习笔记(4)-Python对象

阅读更多
1. 所有的 Python 对像都拥有三个特性:身份,类型和值。
  身份:
  每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id()来得到。
这个值可以被认为是该对象的内存地址。
  类型
对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。您可以用内建函数 type()查看 Python 对象的类型。因为在 Python 中类型也是对象
(还记得我们提到 Python 是面向对象的这句话吗?),所以 type()返回的是对象而不是简单的
字符串。
  值
对象表示的数据项

2. 标准类型
数字(分为几个子类型,其中有三个是整型)
整型
布尔型
长整型
浮点型
复数型
字符串
列表
元组
字典

3. 其他内建类型
类型
Null 对象 (None)
文件
集合/固定集合
函数/方法
模块


4. 类型对象和 type 类型对象
  Python 有一个特殊的类型,被称作 Null 对象或者 NoneType,它只有一个值,那就是 None。它不支持任何运算也没有任何内建方法。None 没有什么有用的属性,它的布尔值总是 False。

5. 布尔值
   所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布
尔 True 或 False 值。空对象、值为零的任何数字或者 Null 对象 None 的布尔值都是 False。
   下列对象的布尔值是 False。
      None
      False (布尔类型)
      所有的值为零的数:
      0 (整型)
      (浮点型)
      0L (长整型)
      0.0+0.0j (复数)
      "" (空字符串)
      [] (空列表)
      () (空元组)
      {} (空字典)

6. 内部类型
       代码
       帧
       跟踪记录
       切片
       省略
       Xrange
 
7. Python 提供了 is 和 is not运算符来测试两个变量是否指向同一个对象。象下面这样执行一个测试
  a is b
   这个表达式等价于下面的表达式
  id(a) == id(b)

8.整数对象和字符串对象是不可变对象,所以 Python 会很高效的缓存它们。这会造成我们认为 Python 应该创建新对象时,它却没有创建新对象的假象。看下面的例子:
  >>> a = 1
  >>> id(a)
  8402824
  >>> b = 1
  >>> id(b)
  8402824
  >>>
  >>> c = 1.0
  >>> id(c)
  8651220
  >>> d = 1.0
  >>> id(d)
  8651204

9. 标准类型内建函数
函数               功能
cmp(obj1, obj2)  比较 obj1 和 obj2, 根据比较结果返回整数 i:
                  i < 0 if obj1 < obj2
                 i > 0 if obj1 > obj2
                 i == 0 if obj1 == obj2
repr(obj) 或 `obj` 返回一个对象的字符串表示
str(obj)         返回对象适合可读性好的字符串表示
type(obj)       得到一个对象的类型,并返回相应的 type 对象

10. str()函数得到的字符串可读性好, 而 repr()函数得到的字符串通常可以用来重新获得该对象, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的.

11. 类型工厂函数
下面这些大家熟悉的工厂函数在老的 Python 版里被称为内建函数:
  int(), long(), float(), complex()
  str(), unicode(), basestring()
  list(), tuple()
  type()
  以前没有工厂函数的其他类型,现在也都有了工厂函数。除此之外,那些支持新风格的类
的全新的数据类型,也添加了相应的工厂函数。下面列出了这些工厂函数:
         dict()
         bool()
         set(), frozenset()
         object()
         classmethod()
         staticmethod()
         super()
         property()
         file()

12. 如果让我们最啰嗦的描述标准类型,我们也许会称它们是 Python 的“基本内建数据对象原始类型”。
“基本”,是指这些类型都是 Python 提供的标准或核心类型。
“内建”,是由于这些类型是 Python 默认就提供的
“数据”,因为他们用于一般数据存储
“对象”,因为对象是数据和功能的默认抽象
“原始”,因为这些类型提供的是最底层的粒度数据存储
“类型”,因为他们就是数据类型

13. 存储模型
分类            Python 类型
标量/原子类型    数值(所有的数值类型),字符串(全部是文字)
容器类型        列表、元组、字典

14.更新模型
分类         Python 类型
可变类型      列表, 字典
不可变类型    数字、字符串、元组

15.以访问模型为标准的类型分类
访问模型
分类             Python 类型
直接访问              数字
顺序访问            字符串、列表、元组
映射访问            字典

16. 标准类型分类
数据类型  存储模型   更新模型   访问模型
数字      Scalar   不可更改   直接访问                      
字符串    Scalar   不可更改   顺序访问
列表    Container   可更改   顺序访问      
元组    Container   不可更改  顺序访问     
字典   Container    可更改   映射访问

17. Python不支持的类型
    (1).Python 没有 char 或 byte 类型来保存单一字符或 8 比特整数。你可以使用长度为 1 的字符串表示字符或 8 比特整数。
    (2).Python 替你管理内存,因此没有必要访问指针。在 Python 中你可以使用 id()函数得到一个对象的身份号, 这是最接近于指针的地址。 因为你不能控制这个值,所以其实没有太大意义。其实在 Python 中, 一切都是指针。
    (3).Python 的普通整数相当于标准整数类型,不需要类似 C 语言中的 int, short, long 这三种整数类型。
    (4).Python 的浮点类型实际上是 C 语言的双精度浮点类型。Python 认为同时支持两种浮点类型的好处与支持两种浮点类型带来的开销不成比例,所以 Python 决定不支持单精度浮点数。对那些宁愿放弃更大的取值范围而需要更高精确度的用户来说, Python 还有一种十进制浮点数类型 Decimal, 不过你必须导入 decimal 模块才可以使用它。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics