Python学习笔记_Python对象
Python学习笔记_Python对象
首先来理解一个通俗的含义,什么是对象?事实上对象不管在什么语言里面,比方C++,Python里面都是指一块有类型的内存。对象里面存放着对应的数据
Python对象
全部的Python对象都有三个特性:身份,类型,值
- 身份:每个对象都有唯一的一个身份ID来标识自己,就像该对象在内存中的存储地址一样,是唯一的。不可共用的。不论什么对象的身份标识符都能够用内建函数id()来得到
x=1
print id(x)
#执行结果:163449008
类型:由于Python是动态类型的。所以一个对象里面就应该保存该对象的类型来决定该对象而已进行一些什么样的操作。我们能够通过内建函数type()来得到对象的类型
number1 = 1
str1 = 'Hello World'
print type(number1)
print type(str1)
#执行结果
#<type 'int'>
#<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对象,仅仅只是这个对象被以字符串的形式展现出来
print type(10)
print type(type(10))
#执行结果:
#<type 'int'>
#<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里面,一般都是首先在内存中创建一个对象,然后再将这个对象的引用赋值给变量。通过引用对对象进行操作。
x = 3.14 # 创建一个3.14浮点型对象,并将引用赋值给变量x
在很多情况下,一个对象的引用会传给对个变量,为了检測两个变量是否同一时候指向同一个变量,我们能够用内建函数id()来比較两个变量指向对象的id是否相等。或者使用is或者is not来比較两个变量是否指向同一个对象
举个栗子:
x = 3.14
y = x
print id(x) == id(y)
print x is y # 和 id(x) == id(y) 一样
print x is not y # 和 id(x) != id(y) 一样
执行结果:
True
True
False
举个栗子:
x = 3.14
y = 1.0 + 2.14
print x is y # 尽管数值同样,可是并不指向同一个对象
执行结果:
False
布尔类型
当多个布尔条件须要通手机进行推断时,Python为我们提供了以下几个语句
| 操作符 | 功能 |
|---|---|
| and | 逻辑与 |
| or | 逻辑或 |
| not | 逻辑非 |
标准类型的内建函数
除了操作符,Python还提供了一些内建函数用于这些基本信息:
| 函数 | 功能 |
|---|---|
| cmp(obj1 , obj2) | 比較两个对象是否相等 |
| repr(obj) | 返回一个对象的字符串表示 |
| str(obj) | 以可读性良好的为目的返回一个对象的字符串表示 |
| type(obj) | 返回对象的类型,返回的类型是一个类型对象 |
type(Obj)
type()内建函数是用来返回一个对象的类型的
print type(1)
print type('Hello World')
执行结果:
cmp(obj1 , obj2)
cmp(obj1 , obj2)是用来比較两个对象的
| 返回结果 | 比較情形 |
|---|---|
| 正整数 | obj1 > obj2 |
| 0 | obj1 = obj2 |
| 负整数 | obj1 < obj2 |
上面比較返回的数值能够理解为 obj1 - obj2 返回的结果
举个栗子:
x, y = 1, 2
print cmp(x, y)
# 执行结果: -1
str1, str2 = 'xyz', 'abc'
print cmp(str1, str2)
# 执行结果: 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)是对用户比較友好 , 可是很多情况下str和repr的输出都是一样的
print str(1)
print repr(1)
#执行结果:
#1
#1
type(obj) & isinstance(obj)
type(obj)能够返回随意Python对象的类型,而不仅局限于标准类型
举个栗子:
对于标准类型
print type('')
#执行结果: <type 'str'>
print type({})
#执行结果: <type 'dict'>
对于自己定义类型
class Foo:
pass
foo = Foo()
class Bar(object):
pass
bar = Bar()
print type(Foo)
#执行结果 : <type 'classobj'>
print type(foo)
#执行结果 : <type 'instance'>
print type(Bar)
#执行结果 : <type 'type'>
print type(bar)
#执行结果 : <type '__main__.Bar'>
假设如今我们须要确定一个对象的类型,我们能够採用以下的语句进行推断:
#方式1
if type(num) == type(0):...
#方式2
import types
if type(num) == types.IntType:...
#方式3
if type(num) is types.IntType:... # 由于在执行时仅仅有一个对象来表示整形类型
#方式4
from types import IntType
if type(num) is IntType:...
#方式5
if isinstance(num , int):...
标准类型的分类
有三种不同的模型能够帮助我们对基本类型进行分类:
- 存储模型
- 更新模型
- 訪问模型
存储模型
存储模型里面我们依照类型的对象能够保存多找个对象分为两类:
- 标量存储类型:仅仅能保存单个字面对象的类型
- 容器存储类型:能够容纳多个对象的类型
| 分类 | python类型 |
|---|---|
| 标量存类型 | 数值(全部数值类型) 。字符串(全部是文字。由于python没有字符类型) |
| 容器类型 | 列表 , 元组 , 字典 |
更新模型
在python里面类型分为能够更改是不能够更改两种类型,执行更改的对象同意他们的值发生变化。而不可更改的对象则不同意他们的值进行更改
| 分类 | Python类型 |
|---|---|
| 可变类型 | 列表,字典 |
| 不可变类型 | 数字。字符串 。元组 |
什么?数字和字符串是不能够更改的?那以下这个更改又是怎么回事?
str1 = 'Hello World'
str1 = 'Hello Moto'
不错,上面的变量的值的确发生了改变,可是变量不代表对象。第一次赋值是将'Hello World'的引用赋值给str1,而第二仅仅赋值语句则是将'Hello Moto'的引用赋值给str1,两个字符串对象'Hello World'和'Hello Moto'的值是没有发生改变的!
訪问模型
在訪问模型中共同拥有三种訪问方式:直接存取,顺序和映射
- 直接訪问:对非容器对象都能够直接訪问
- 序列訪问:容器内的元素能够从0開始的索引顺序訪问
- 映射訪问: 通过一个唯一的键来訪问
| 分类 | Python类型 |
|---|---|
| 直接訪问 | 数字 |
| 顺序訪问 | 字符串, 元组, 列表 |
| 映射訪问 | 字典 |
不支持的类型
Python里面有一些常见可是不支持的类型:
- char和byte
- 指针
- int, short, long
- 单精度浮点数
Python学习笔记_Python对象的更多相关文章
- Python学习笔记_Python基础
Python 基础 语句和语法 凝视 继续 代码组 代码的缩进 在一行书写多个语句 模块 变量赋值 赋值操作符 增量赋值 多重赋值 多元赋值 python编写的基本风格 模块的结构和布局 内存管理 变 ...
- Python学习笔记_Python向Excel写入数据
实验环境 1.OS:Win 10 64位 2.Python 3.7 3.如果没有安装xlwt库,则安装:pip install xlwt 下面是从网上找到的一段代码,网上这段代码,看首行注释行,是在L ...
- Python学习笔记之类与对象
这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- 【Python学习笔记之二】浅谈Python的yield用法
在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...
- Python学习笔记(十四)
Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...
随机推荐
- 给SVN控制的项目添加忽略文件/文件夹
忽略目录其实有些像建立一个文件夹,但却不放入版本控制.如果不加入版本控制又会在svn status命令中显示出来,很不方便,所以可以设置本文件夹属性,让它既加入版本控制,又忽略其变化 未加入控制的文件 ...
- 16第一章 ASP.Net编程基础知识
第一章 ASP.Net编程基础知识 第一章 ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...
- PowerPoint幻灯片手动翻页设置技巧
步骤: 幻灯片放映>设置幻灯片放映>手动
- java关于时间的相关操作
/** * 获取当天时间零点 * @return */ public Date gettoday(){ SimpleDateFormat sdf = new SimpleDateFormat(&quo ...
- vuex如何管理需要即时更新的全局变量
自己在使用vue练习开发的时候遇到全局变量无法即时更新的问题,查了资料之后得出结论使用vuex能够快速解决该问题,但是看了好多人讲解vuex的教程自己跟着去做都没解决自己想要的,最后找到一个比较容易理 ...
- 51nod 1551 集合交易 最大权闭合子图
题意: 市场中有n个集合在卖.我们想买到满足以下要求的一些集合,所买到集合的个数要等于所有买到的集合合并后的元素的个数. 每个集合有相应的价格,要使买到的集合花费最小. 这里我们的集合有一个特点:对于 ...
- idea搭建SSM的maven项目(tomcat容器)
一.创建maven的web项目 (1)选择项目的骨架 (2)写项目的坐标 (3)maven的设置 设置maven的本地仓库,以及配置文件的位置,同时点击+号,填入archetypeCatalog和in ...
- KBE_创建项目和基本常识
此笔记参考官方文档 第一个项目 资产库:是每一个项目文件夹的名称,使用KBE提供的生成工具生成一个最小资产库,其中包含了很多常用的工具,默认名server_assets: res:放置一些资源(入地图 ...
- 配置Django+mysql+pydev(x64)
mysqldb需要安装64位的(http://ishare.iask.sina.com.cn/f/21839771.html),否则出现 import _mysql ImportError: DLL ...
- 精帖转载(关于stock problem)
Note: this is a repost(重新投寄) of my original post here with updated solutions(解决方案) for this problem ...