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对象,不 ...
随机推荐
- LeetCode137只出现一次的数字——位运算
题目 题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现三次.找出那个只出现一次的元素. 说明:你的算法应该具有线性时间的复杂度.你可以不使用额外的空间来实现吗? 思路 题 ...
- 修改phpadmin中的默认超时时间
登录后1440秒未活动后总是自动退出,一天还要登录多次,终于有时间来解决这个问题了,感觉是session超时,结果在网上search了下,找到解决办法啦,哈哈哈,在此做个笔记: phpmyadmin在 ...
- 第一天 初识Python
Python基础 一 编程语言 什么是编程语言? 上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质.在编程的世界里,计算机更像是人 ...
- 使用nsight调试caffe
首先你需要下载caffe源码,然后先编译好,注意一定要将Makefile.config里的DEBUG := 1注释掉 可以看到注释掉debug后编译会生成的.build_debug目录,调试过程中需要 ...
- mac 下安装python pil
mac:sudo brew install freetype sudo pip install pillow ubuntu: sudo apt-get install libfreetype6-dev ...
- JFinal怎么更改项目服务的端口
如图所示,运行时启动的端口是80,现在将它改成801: 可以在Debug configuration 或 Run configuration 弹出的窗口中配置,方法右击项目>properties ...
- laydate组件选择时间段的判断
前言: 在使用laydate组件的时候,难免会遇到选择时间段,官网给的文档中有选择时间段的组件,但是并不好用,首先只能选择一个月的时间段,有局限性,其次精确到时间的话要先选日期范围再选时间范围,很变态 ...
- Samba 学习笔记
这个网站不错.https://www.ibm.com/developerworks/cn/linux/l-lpic3-311-1/
- thinkphp5 框架修改的地方
框架修改的地方 vendor/topthink/think-captcha/src/Captcha.php api验证码入库 196行 $img_code = strtoupper(implode(' ...
- TensorFlow2-维度变换
目录 TensorFlow2-维度变换 Outline(大纲) 图片视图 First Reshape(重塑视图) Second Reshape(恢复视图) Transpose(转置) Expand_d ...