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对象,不 ...
随机推荐
- OpenMP入门教程(二)
OpenMP API概述 OpenMP由三部分组成: 编译指令(19) 运行时库程序(32) 环境变量(9) 后来的API包含同样的三个组件,只是三者的数量都有所增加. 编译器指令 OpenMP编译器 ...
- 获取select标签选中的值的三种方式
var obj = document.getElementByIdx_x(”testSelect”); //定位id var index = obj.selectedIndex; // 选中索引 va ...
- mac 下安装python pil
mac:sudo brew install freetype sudo pip install pillow ubuntu: sudo apt-get install libfreetype6-dev ...
- 《BUG创造队》第五次作业:项目需求分析改进与系统设计
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验九 团队作业5-团队项目需求改进与系统设计 团队名称 BUG创造队 作业学习目标 1.编写完整<软件需求规格说明书 ...
- HDU—4463 Outlets 最小生成树
In China, foreign brand commodities are often much more expensive than abroad. The main reason is th ...
- 笔试算法题(50):简介 - 广度优先 & 深度优先 & 最小生成树算法
广度优先搜索&深度优先搜索(Breadth First Search & Depth First Search) BFS优缺点: 同一层的所有节点都会加入队列,所以耗用大量空间: 仅能 ...
- 分布式集群算法 memcached 如何实现分布式?
memcached 是一个”分布式缓存”,然后 memcached 并不像 mongoDB 那 样,允许配置多个节点,且节点之间”自动分配数据”. 就是说--memcached 节点之间,是不互相通信 ...
- 经典卷积网络VGG,GoodLeNet,Inception
目录 ImageNet LeNet-5 LeNet-5 Demo AlexNet VGG 1*1 Convolution GoogLeNet Stack more layers? ImageNet L ...
- Django的forms包部分重要用法:
from django.forms import fields from django.forms import Form from django.forms import widgets 在view ...
- LeetCode(55)Jump Game
题目 Given an array of non-negative integers, you are initially positioned at the first index of the a ...