Python之三(对象)

Python 使用对象模型来存储数据。构造任何类型的值都是一个对象。

 

对象的三个特性

1、身份:可以通过内建函数id()来得到对象唯一的身份标识。这个值可以被认为是该对象的内存地址。

import logging
print id(logging)      #输出:12054096

       2、类型:对象的类型决定了该对象可以保存什么类型的值,可以用内建函数type()查看Python 对象的类型。

name = 'zhangsan'
print type(name)     #输出:<type 'str'>

因为在Python 中类型也是对象,所以type()返回的是对象而不是简单的字符串。      

3、值:对象表示的数据项

 

基本数据类型

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

其他内建类型

类型、Null 对象 (None)、文件、集合/固定集合、函数/方法、模块、类

 

布尔值

None和False以及所有值为0的数或者表达式,他们的布尔值都是False,除此之外的值的布尔值都是True

 

对象值比较

比较运算符用来判断同类型对象的值是否相等,所有的内建类型均支持比较运算,比较运算返回布尔值 True 或 False

等于(==),大于等于(>=),小于等于(<=),不等于(!=)

 

对象本身比较

也就是通常所说的对象引用的比较,返回布尔值 True 或 False

等于(is),不等于(is not)

a = b =1
print a is b                             #True
print id(a) == id(b)                 #等价于a is b
print a is not b                       #False
 

逻辑运算符

逻辑非(not)、逻辑与(and)、逻辑或(or)

 

常见内置函数

函数名功能
cmp(obj1,obj2)

比较 obj1 和 obj2, 根据比较结果返回整数 i:

i < 0 if obj1 < obj2

i > 0 if obj1 > obj2

i == 0 if obj1 == obj2

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

 

str()和 repr()的区别

内建函数 str() 和 repr() 可以方便的以字符串的方式获取对象的内容、类型、数值属性等信息。
str()函数得到的字符串可读性好,但它返回结果通常无法用于eval()求值,但很适合用于 print 语句输出,

一个类(class)可通过 __str__() 成员控制其行为。该成员不存在,则使用其 __repr__() 成员。
而repr()函数返回一个可以用来表示对象的可打印字符串, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的。
但并不是所有repr()返回的字符串都能够用eval()内建函数得到原来的对象,记住这一点。

一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。


特殊的操作符``

repr() 和 `` 做的是完全一样的事情,Python 社区目前已经不鼓励继续使用``运算符,而且使用repr()函数相对来说有更多的优势,除了使用起来意义更明确意外,函数名还可以作为别的函数的参数和返回值使用。

 

type() 和 isinstance()

他们就类似于Java中Class类型和对象实例的关系。type()返回对象属于什么类型,isinstance()则返回某个对象是不是某个类型的实例。

 

cmp()

内建函数cmp()用于比较两个对象obj1 和obj2, 如果obj1 小于obj2, 则返回一个负整数,如果obj1 大于obj2 则返回一个正整数, 如果obj1 等于obj2, 则返回0。如果是用户自定义对象, cmp()会调用该类的特殊方法__cmp__()。

类似于Java中的compareTo()方法。

 

类型工厂函数
Python 2.2 统一了类型和类, 所有的内建类型现在也都是类, 在这基础之上, 原来的所谓内建转换函数象int(), type(), list() 等等, 现在都成了工厂函数。 也就是说虽然他们看上去有点象函数, 实质上他们是类的工厂方法。当你调用它们时, 实际上是生成了该类型的一个实例。

python中的类型工厂函数,有以下一些:

int(),long(),float(),complex(),str(),unicode(),basestring(),list(),tuple(),type()

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

 

可变与不可变类型

可变类型即对象的值是可以被改变的,即变量在内存中的地址是没有被改变的,只是单纯的值变化啦。

不可变类型即对象的值是不可以被改变的,即值被改变的同时,他们在内存中的地址是改变了的,而指向了新的值的引用。

可以通过内建函数id()来确认对象的身份在两次赋值前后发生了变化。 新创建的对象被关联到原来的变量名, 旧对象被丢弃,垃圾回收器会在适当的时机回收这些对象。这同Java中的常量池的处理方式是一样的。

分类python类型
可变类型列表、字典
不可变类型数字、字符串、元组

 

python标准类型分类

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

 

python不支持的数据类型

Python 没有 char 或 byte 类型来保存单一字符或8 比特整数。你可以使用长度为1 的字符串表示字符或8 比特整数。Python 没有指针,因为你不用自己来管理内存,因此没有必要访问指针。在Python 中你可以使用id()函数得到一个对象的身份号, 这是最接近于指针的地址。其实在Python 中, 一切都是指针。

 

int 、short、long

Python 的普通整数相当于标准整数类型,不需要类似C 语言中的 int, short, long 这三种整数类型。事实上Python 的整数实现等同于C 语言的长整数。 由于Python 的整型与长整型密切融合, 用户几乎不需要担心什么。 你仅需要使用一种类型, 就是Python 的整型。即便数值超出整型的表达范围, 比如两个很大的数相乘, Python 会自动的返回一个长整数给你而不会报错。

 

float、double
C 语言有单精度和双精度两种浮点类型。Python 认为同时支持两种浮点类型的好处与支持两种浮点类型带来的开销不成比例,所以Python 不支持单精度浮点数,Python 的浮点类型实际上是C 语言的双精度浮点类型。。对那些宁愿放弃更大的取值范围而需要更高精确度的用户来说, Python 还有一种十进制浮点数类型 Decimal, 不过你必须导入decimal 模块才可以使用它。浮点数总是不精确的。Decimals 则拥有任意的精度。在处理金钱这类确定的值时,Decimal 类型就很有用。 在处理重量,长度或其它度量单位的场合, float 足够用了。

 

参考资料:

Python核心编程(第二版) 人民邮电出版社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值