Python学习笔记_Python对象

首先来理解一个通俗的含义,什么是对象?事实上对象不管在什么语言里面,比方C++,Python里面都是指一块有类型的内存。对象里面存放着对应的数据

Python对象

全部的Python对象都有三个特性:身份类型

- 身份:每个对象都有唯一的一个身份ID来标识自己,就像该对象在内存中的存储地址一样,是唯一的。不可共用的。不论什么对象的身份标识符都能够用内建函数id()来得到

  1. x=1
  2. print id(x)
  3. #执行结果:163449008
  • 类型:由于Python是动态类型的。所以一个对象里面就应该保存该对象的类型来决定该对象而已进行一些什么样的操作。我们能够通过内建函数type()来得到对象的类型
  1. number1 = 1
  2. str1 = 'Hello World'
  3. print type(number1)
  4. print type(str1)
  5. #执行结果
  6. #<type 'int'>
  7. #<type 'str'>
  • :对象表示的数据项,我们在内存里面无区别的存储数据,假如我们在内存里面存储的是1000001,假设是str类型,那么就解释为'A',假设是整形,就解释为65

对象属性: 某些对象有属性,值或者相关联的可执行代码。最常见的属性是函数和方法

标准类型

  • 数字
  • Integer 整形
  • Boolean 布尔型
  • Long integer 长整形
  • Floating point real number 浮点型
  • Complex number 复数型
  • String 字符串
  • List 列表
  • Tuple 元组
  • Dictionarry 字典

其它内建类型

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

类型对象和type类型对象

之前提到过,对象通过类型来推断自己能够执行那些操作,那么类型就是用来存储这些操作最佳场所,所以相对于字符串来说,用一个对象来描写叙述一个类型更为适合。

type()内建函数返回一个type对象,仅仅只是这个对象被以字符串的形式展现出来

  1. print type(10)
  2. print type(type(10))
  3. #执行结果:
  4. #<type 'int'>
  5. #<type 'type'>

全部类型对象的类型都是type,它也是全部类型的根和全部Python标准类的默认元类。

Python的Null对象——None

None仅仅有一个值,它不支持不论什么运算。没有不论什么内建方法。

每个对象天生具有True或者False值。

以下对象的布尔值是False:

  • None
  • False
  • 全部值为0的数
  • 0
  • 0.0
  • 0L
  • 0.0+0.0j
  • “”
  • []
  • ()
  • {}

    除了上面的值,其它值都是True

标准类型操作符

对象值的比較

对象值的比較会直接返回一个Bool对象,各种类型的对象的比較方法也不同。,数字类型的依据数值的大小和符号比較,字符串依照字符序列进行比較等等

对象身份比較

在python里面,一般都是首先在内存中创建一个对象,然后再将这个对象的引用赋值给变量。通过引用对对象进行操作。

  1. x = 3.14 # 创建一个3.14浮点型对象,并将引用赋值给变量x

在很多情况下,一个对象的引用会传给对个变量,为了检測两个变量是否同一时候指向同一个变量,我们能够用内建函数id()来比較两个变量指向对象的id是否相等。或者使用is或者is not来比較两个变量是否指向同一个对象

举个栗子:

  1. x = 3.14
  2. y = x
  3. print id(x) == id(y)
  4. print x is y # 和 id(x) == id(y) 一样
  5. print x is not y # 和 id(x) != id(y) 一样

执行结果:

True

True

False

举个栗子:

  1. x = 3.14
  2. y = 1.0 + 2.14
  3. print x is y # 尽管数值同样,可是并不指向同一个对象

执行结果:

False

布尔类型

当多个布尔条件须要通手机进行推断时,Python为我们提供了以下几个语句

操作符 功能
and 逻辑与
or 逻辑或
not 逻辑非

标准类型的内建函数

除了操作符,Python还提供了一些内建函数用于这些基本信息:

函数 功能
cmp(obj1 , obj2) 比較两个对象是否相等
repr(obj) 返回一个对象的字符串表示
str(obj) 以可读性良好的为目的返回一个对象的字符串表示
type(obj) 返回对象的类型,返回的类型是一个类型对象

type(Obj)

type()内建函数是用来返回一个对象的类型的

  1. print type(1)
  2. print type('Hello World')

执行结果:

cmp(obj1 , obj2)

cmp(obj1 , obj2)是用来比較两个对象的

返回结果 比較情形
正整数 obj1 > obj2
0 obj1 = obj2
负整数 obj1 < obj2

上面比較返回的数值能够理解为 obj1 - obj2 返回的结果

举个栗子:

  1. x, y = 1, 2
  2. print cmp(x, y)
  3. # 执行结果: -1
  1. str1, str2 = 'xyz', 'abc'
  2. print cmp(str1, str2)
  3. # 执行结果: 1

str(obj) & repr(obj)

上面的两个内建函数str(obj)repr(obj)都是返回一个对象的字符串。可是这两个内建函数又有所不同:

  • str(obj):是用来返回一个可读性好的字符串,面向的用户是程序猿
  • repr(obj):是用来返回一个Python虚拟机看得懂的字符串,面向的用户是Python虚拟机repr(obj)返回的字符串能够通过eval(str)又一次求值!即这个式子是成立obj == eval(repe(obj))

总的来说。就是repr(obj)是对Python比較友好str(obj)是对用户比較友好 , 可是很多情况下strrepr的输出都是一样的

  1. print str(1)
  2. print repr(1)
  3. #执行结果:
  4. #1
  5. #1

type(obj) & isinstance(obj)

type(obj)能够返回随意Python对象的类型,而不仅局限于标准类型

举个栗子:

对于标准类型

  1. print type('')
  2. #执行结果: <type 'str'>
  3. print type({})
  4. #执行结果: <type 'dict'>

对于自己定义类型

  1. class Foo:
  2. pass
  3. foo = Foo()
  4. class Bar(object):
  5. pass
  6. bar = Bar()
  7. print type(Foo)
  8. #执行结果 : <type 'classobj'>
  9. print type(foo)
  10. #执行结果 : <type 'instance'>
  11. print type(Bar)
  12. #执行结果 : <type 'type'>
  13. print type(bar)
  14. #执行结果 : <type '__main__.Bar'>

假设如今我们须要确定一个对象的类型,我们能够採用以下的语句进行推断:

  1. #方式1
  2. if type(num) == type(0):...
  3. #方式2
  4. import types
  5. if type(num) == types.IntType:...
  6. #方式3
  7. if type(num) is types.IntType:... # 由于在执行时仅仅有一个对象来表示整形类型
  8. #方式4
  9. from types import IntType
  10. if type(num) is IntType:...
  11. #方式5
  12. if isinstance(num , int):...

标准类型的分类

有三种不同的模型能够帮助我们对基本类型进行分类:

  • 存储模型
  • 更新模型
  • 訪问模型

存储模型

存储模型里面我们依照类型的对象能够保存多找个对象分为两类:

  • 标量存储类型:仅仅能保存单个字面对象的类型
  • 容器存储类型:能够容纳多个对象的类型
分类 python类型
标量存类型 数值(全部数值类型) 。字符串(全部是文字。由于python没有字符类型)
容器类型 列表 , 元组 , 字典

更新模型

python里面类型分为能够更改是不能够更改两种类型,执行更改的对象同意他们的值发生变化。而不可更改的对象则不同意他们的值进行更改

分类 Python类型
可变类型 列表,字典
不可变类型 数字。字符串 。元组

什么?数字和字符串是不能够更改的?那以下这个更改又是怎么回事?

  1. str1 = 'Hello World'
  2. str1 = 'Hello Moto'

不错,上面的变量的值的确发生了改变,可是变量不代表对象。第一次赋值是将'Hello World'的引用赋值给str1,而第二仅仅赋值语句则是将'Hello Moto'的引用赋值给str1,两个字符串对象'Hello World''Hello Moto'的值是没有发生改变的!

訪问模型

在訪问模型中共同拥有三种訪问方式:直接存取,顺序映射

  • 直接訪问:对非容器对象都能够直接訪问
  • 序列訪问:容器内的元素能够从0開始的索引顺序訪问
  • 映射訪问: 通过一个唯一的键来訪问
分类 Python类型
直接訪问 数字
顺序訪问 字符串, 元组, 列表
映射訪问 字典

不支持的类型

Python里面有一些常见可是不支持的类型:

  • char和byte
  • 指针
  • int, short, long
  • 单精度浮点数

Python学习笔记_Python对象的更多相关文章

  1. Python学习笔记_Python基础

    Python 基础 语句和语法 凝视 继续 代码组 代码的缩进 在一行书写多个语句 模块 变量赋值 赋值操作符 增量赋值 多重赋值 多元赋值 python编写的基本风格 模块的结构和布局 内存管理 变 ...

  2. Python学习笔记_Python向Excel写入数据

    实验环境 1.OS:Win 10 64位 2.Python 3.7 3.如果没有安装xlwt库,则安装:pip install xlwt 下面是从网上找到的一段代码,网上这段代码,看首行注释行,是在L ...

  3. Python学习笔记之类与对象

    这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...

  4. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  5. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  6. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  7. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  8. 【Python学习笔记之二】浅谈Python的yield用法

    在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...

  9. Python学习笔记(十四)

    Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

随机推荐

  1. element-UI el-table二次封装

    Part.1 为什么要二次封装? 这是 Element 网站的 table 示例: <template> <el-table :data="tableData" ...

  2. 一次URL请求过程--tomcat

    一:请求的过程 1.DNS域名解析 2.建立TCP连接(三次握手) 3.发送请求--tomcat进行处理 4.四次挥手关闭连接 二:详解1---DNS域名解析 1.浏览器会检查缓存中有没有这个域名对应 ...

  3. Tab键可访问的下拉菜单demo

    <ul id="navigationRegion"> <li token="1" class="index_on"> ...

  4. Qt的widget与Button添加图片

    ui.widget->setAutoFillBackground(true); QImage image; QPalette palette; image.load("D:\\Work ...

  5. 远程连接mysql数据库

    远程连接mysql数据库需要以下步骤(改表法): 1.数据源(数据库服务器)对要访问数据库进行授权: 2.本地库(本地)连接: 具体方法: 1. 进入数据服务器,输入cmd进入控制台:输入 mysql ...

  6. 关于Integer,127和128的问题

    里面的,直接贴源码来看 Integer i=127; Integer b=128; Integer c=128; Integer d=127;Integer j;System.out.println( ...

  7. NOI模拟(3.6)Assignment

    Description 随机生成一个长度为m且每个元素都为1~n之间的整数的单调不下降序列~(即序列的(i>1)都不小于),(随机生成指每一种可能的序列都等概率被生成).请问这个序列的众数出现次 ...

  8. Leetcode 149.直线上最多的点数

    直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | |        o ...

  9. 九度oj 题目1055:数组逆置

    题目1055:数组逆置 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8225 解决:3932 题目描述: 输入一个字符串,长度小于等于200,然后将数组逆置输出. 输入: 测试数据有多组 ...

  10. mvc 下 使用kindeditor 配置信息

    先去下载: http://code.google.com/p/kindeditor/downloads/list引用: LitJSON.dll文件<script src="~/kind ...