设为首页 收藏本站
查看: 2564|回复: 0

[经验分享] Dave Python 练习三 -- 对象

[复制链接]

尚未签到

发表于 2017-4-25 09:05:18 | 显示全部楼层 |阅读模式
  

  #encoding=utf-8#*************Part 1 : 对象 ******************#Python 对象#Python 使用对象模型来存储数据。构造任何类型的值都是一个对象。所有的Python 对像都拥有三个特性:身份,类型和值。#身份:#每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。#类型:#对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。您可以用内建函数type()查看Python 对象的类型。因为在Python 中类型也是对象,所以type()返回的是对象而不是简单的字符串。#值#对象表示的数据项##Python 有一系列的基本(内建)数据类型,必要时也可以创建自定义类型来满足你的应用程序的需求。绝大多数应用程序通常使用标准类型,对特定的数据存储则通过创建和实例化类来实现。#对象属性#某些Python 对象有属性、值或相关联的可执行代码,比如方法(method)。Python 用点(.)标记法来访问属性。属性包括相应对象的名字等等。最常用的属性是函数和方法,不过有一些Python 类型也有数据属性。含有数据属性的对象包括(但不限于):类、类实例、模块、复数和文件。#*************Part 2 : 标准类型  ******************#数字(分为几个子类型,其中有三个是整型)#整型#布尔型#长整型#浮点型#复数型#字符串#列表#元组#字典#*************Part 3 : 其他内建类型  ******************#类型#Null 对象 (None)#文件#集合/固定集合#函数/方法#模块#类#类型对象和type 类型对象#通过调用type()函数你能够得到特定对象的类型信息:#print(type('Dave is DBA'))#--><class 'str'>#print(type(88))#--><class 'int'>#那么type() 函数的类型是什么?#print(type(type(88)))#--><class 'type'>#由此可见,所有类型对象的类型都是type,它也是所有Python 类型的根和所有Python 标准类的默认元类(metaclass)#None, Python 的 Null 对象#Python 有一个特殊的类型,被称作 Null 对象或者 NoneType,它只有一个值,那就是 None。它不支持任何运算也没有任何内建方法。None 没有什么有用的属性,它的布尔值总是False。#核心笔记:布尔值#所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔 True 或 False 值。空对象、值为零的任何数字或者Null 对象 None 的布尔值都是False。##下列对象的布尔值是False。# None# False (布尔类型)# 所有的值为零的数:# 0 (整型)# (浮点型)# 0L (长整型)# 0.0+0.0j (复数)# "" (空字符串)# [] (空列表)# () (空元组)# {} (空字典)##值不是上面列出来的任何值的对象的布尔值都是 True,例如non-empty、 non-zero 等等。用户创建的类实例如果定义了nonzero(__nonzero__())或length(__len__())且值为0,那么它们的布尔值就是 False。#*************Part 4 : 内部类型  ******************#内部类型有:# 代码# 帧# 跟踪记录# 切片# 省略# Xrange#一般的程序员通常不会直接和这些对象打交道。#代码对象#代码对象是编译过的Python 源代码片段,它是可执行对象。通过调用内建函数compile()可以得到代码对象。代码对象可以被 exec 命令或 eval()内建函数来执行。代码对象本身不包含任何执行环境信息, 它是用户自定义函数的核心, 在被执行时动态获得上下文。(事实上代码对象是函数的一个属性)一个函数除了有代码对象属性以外,还有一些其它函数必须的属性,包括函数名,文档字符串,默认参数,及全局命名空间等等。#帧对象#帧对象表示 Python 的执行栈帧。帧对象包含Python 解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象,本地及全局名字空间字典以及当前指令等。每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个C 栈帧。用到帧对象的一个地方是跟踪记录对象。#跟踪记录 对象#当你的代码出错时, Python 就会引发一个异常。如果异常未被捕获和处理, 解释器就会退出脚本运行,显示类似下面的诊断信息:# Traceback (innermost last):# File "<stdin>", line N?, in ???# ErrorName: error reason#当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。#切片对象#当使用Python 扩展的切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作,包括步进切片, 多维切片,及省略切片。多维切片语法是 sequence[start1 : end1,start2 : end2], 或使用省略号, sequence[...,start1 : end1 ]. 切片对象也可以由内建函数 slice()来生成。步进切片允许利用第三个切片元素进行步进切片,它的语法为sequence[起始索引 : 结束索引 : 步进值]。Python 很早就支持扩展步进切片语法了,但直到Python2.3 以前都必须依靠 C API 或 Jython 才能工作。#省略对象#省略对象用于扩展切片语法中,起记号作用。 这个对象在切片语法中表示省略号。类似Null 对象 None, 省略对象有一个唯一的名字 Ellipsis, 它的布尔值始终为 True.#XRange 对象#调用内建函数 xrange() 会生成一个Xrange 对象,xrange()是内建函数 range()的兄弟版本, 用于需要节省内存使用或 range()无法完成的超大数据集场合#*************Part 5 : 标准类型运算符  ******************#对象值的比较#比较运算符用来判断同类型对象是否相等,所有的内建类型均支持比较运算,比较运算返#回布尔值 True 或 False。如果你正在使用的是早于 Python2.3 的版本,因为这些版本还没有#布尔类型,所以会看到比较结果为整型值 1 (代表True)或 0 (代表False)。#注意,实际进行的比较运算因类型而异。换言之,数字类型根据数值的大小和符号比较,#字符串按照字符序列值进行比较,等等。#比较操作是针对对象的值进行的,也就是说比较的是对象的数值而不是对象本身#多个比较操作可以在同一行上进行,求值顺序为从左到右。#print(3>4>5)#==>(3>4)and(4>5)#对象身份比较#作为对值比较的补充,Python 也支持对象本身的比较。对象可以被赋值到另一个变量(通过引用)。因为每个变量都指向同一个(共享的)数据对象,只要任何一个引用发生改变,该对象的其它引用也会随之改变。#Python 提供了is 和is not 运算符来测试两个变量是否指向同一个对象。#a is b#这个表达式等价于下面的表达式#id(a) == id(b)#obj1 is obj2 obj1 和obj2 是同一个对象#obj1 is not obj2 obj1 和obj2 不是同一个对象#注意: 整数对象和字符串对象是不可变对象,所以Python 会很高效的缓存它们。这会造成我们认为Python 应该创建新对象时,它却没有创建新对象的假象。看下面的例子:#a=1#print(id(a))#-->506090016#b=1#print(id(b))#-->506090016#这里的变量a和b 都引用了1,所以他们的位置相等。#print(a is b)#-->True#如果改成浮点型:#c=2.0#print(id(c))#-->31298760#d=2.0#print(id(d))#-->30315720#布尔类型#布尔逻辑运算符 and, or 和 not 都是Python 关键字,这些运算符的优先级按从高到低的顺序. not 运算符拥有最高优先级,#只比所有比较运算符低一级。 and 和 or 运算符则相应的再低一级。#高   ^ not expr expr 的逻辑非 (否)#   | expr1 and expr2 expr1 和 expr2 的逻辑与#低   |  expr1 or expr2 expr1 和 expr2 的逻辑或#*************Part 6 : 标准类型内建函数  ******************#Python 提供了一些内建函数用于这些基本对象类型:cmp(), repr(), str(), type(), 和等同于repr()函数的单反引号(``) 运算符。#函数                                  功能#cmp(obj1, obj2) 比较 obj1 和 obj2, 根据比较结果返回整数 i:#                   i < 0 if obj1 < obj2#                   i > 0 if obj1 > obj2#                   i == 0 if obj1 == obj2#repr(obj)        或 `obj` 返回一个对象的字符串表示#str(obj)         返回对象适合可读性好的字符串表示#type(obj)        得到一个对象的类型,并返回相应的type 对象#type() 接受一个对象做为参数,并返回它的类型。它的返回值是一个类型对象。#cmp()#内建函数cmp()用于比较两个对象obj1 和obj2, 如果obj1 小于obj2, 则返回一个负整数,如果obj1 大于obj2 则返回一个正整数, 如果obj1 等于obj2, 则返回0。比较是在对象之间进行的,不管是标准类型对象还是用户自定义对象。如果是用户自定义对象, cmp()会调用该类的特殊方法__cmp__()。#在Python 3.2里只有filecmp.cmp(),用来比较2个文件#str()和 repr() (及 `` 运算符)#内建函数 str() 和 repr() 或反引号运算符(``) 可以方便的以字符串的方式获取对象的#内容、类型、数值属性等信息。str()函数得到的字符串可读性好, 而repr()函数得到的字符#串通常可以用来重新获得该对象, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的。#这两个函数接受一个对象做为其参数, 返回适当的字符串。##尽管str(),repr()和``运算在特性和功能方面都非常相似, 事实上 repr() 和 `` 做的#是完全一样的事情,它们返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下#可以通过求值运算(使用eval()内建函数)重新得到该对象,但str()则有所不同。str() 致力#于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值, 但很适#合用于 print 语句输出#type() 和 isinstance()#Python 不支持方法或函数重载, 因此你必须自己保证调用的就是你想要的函数或对象。#type()返回任意Python 对象对象的类型,而不局限于标准类型。#除了内建函数type(), 还有一个有用的内建函数叫 isinstance(),也利用它来确认一个对象的类型。##每次调用函数都会付出性能代价, 如果我们能减少函数的调用次数, 就会提高程序的性能。#*************Part 7 : 类型工厂函数  ******************#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()#*************Part 8 : 标准类型的分类  ******************# “基本”,是指这些类型都是Python 提供的标准或核心类型。# “内建”,是由于这些类型是Python 默认就提供的# “数据”,因为他们用于一般数据存储# “对象”,因为对象是数据和功能的默认抽象# “原始”,因为这些类型提供的是最底层的粒度数据存储# “类型”,因为他们就是数据类型#有三种不同的模型可以帮助我们对基本类型进行分类,每种模型都展示给我们这些类型之间的#相互关系。这些模型可以帮助我们更好的理解类型之间的相互关系以及他们的工作原理。#存储模型#我们对类型进行分类的第一种方式, 就是看看这种类型的对象能保存多少个对象。Python#的类型, 就象绝大多数其它语言一样,能容纳一个或多个值。一个能保存单个字面对象的类型#我们称它为原子或标量存储,那些可容纳多个对象的类型,我们称之为容器存储。(容器对象有#时会在文档中被称为复合对象,不过这些对象并不仅仅指类型,还包括类似类实例这样的对象)#容器类型又带来一个新问题,那就是它是否可以容纳不同类型的对象。所有的Python 容器对#象都能够容纳不同类型的对象。##字符串看上去像一个容器类型,因为它“包含”字符(并且经常多于一个字符),不过由#于Python 并没有字符类型,所以字符串是一个自我包含的文字类型。##分类               Python 类型#标量/原子类型      数值(所有的数值类型),字符串(全部是文字)#容器类型            列表、元组、字典#更新模型#另一种对标准类型进行分类的方式就是, 针对每一个类型问一个问题:“对象创建成功之后,它的值可以进行更新吗?” #某些类型允许他们的值进行更新,而另一些则不允许。可变对象允许他们的值被更新,而不可变对象则不允许他们的值被更改.##分类            Python 类型#可变类型        列表, 字典#不可变类型       数字、字符串、元组#访问模型#尽管前面两种模型分类方式在介绍Python 时都很有用,它们还不是区分数据类型的首要模#型。对这种目的,我们使用访问模型。也就是说根据访问我们存储的数据的方式对数据类型进#行分类。在访问模型中共有三种访问方式:直接存取,顺序,和映射.##以访问模型为标准的类型分类#分类          Python 类型#直接访问    数字#顺序访问    字符串、列表、元组#映射访问    字典#标准类型分类#数据类型     存储模型    更新模型    访问模型l#数字          Scalar      不可更改    直接访问#字符串         Scalar      不可更改    顺序访问#列表          Container       可更改     顺序访问#元组           Container      不可更改    顺序访问#字典          Container       可更改     映射访问##对非容器类型可以直接访问。所有的数值类型都归到这一类。##序列类型是指容器内的元素按从0 开始的索引顺序访问。一次可以访问一个元素或多个元#素, 也就是大家所了解的切片(slice)。字符串, 列表和元组都归到这一类。我们前面提到过,#Python 不支持字符类型,因此,虽然字符串是简单文字类型,因为它有能力按照顺序访问子字#符串,所以也将它归到序列类型。#映射类型类似序列的索引属性,不过它的索引并不使用顺序的数字偏移量取值, 它的元素#无序存放, 通过一个唯一的key 来访问, 这就是映射类型, 它容纳的是哈希键-值对的集合。#*************Part 9 : 不支持的类型  ******************#char 或 byte#Python 没有 char 或 byte 类型来保存单一字符或8 比特整数。你可以使用长度为1 的字符串表示字符或8 比特整数。##指针#Python 替你管理内存,因此没有必要访问指针。在Python 中你可以使用id()函数得到一个对象的身份号, 这是最接近于指针的地址。#因为你不能控制这个值,所以其实没有太大意义。其实在Python 中, 一切都是指针。##int vs short vs long#Python 的普通整数相当于标准整数类型,不需要类似C 语言中的 int, short, long 这三#种整数类型。事实上Python 的整数实现等同于C 语言的长整数。 由于Python 的整型与长整型#密切融合, 用户几乎不需要担心什么。 你仅需要使用一种类型, 就是Python 的整型。即便#数值超出整型的表达范围, 比如两个很大的数相乘, Python 会自动的返回一个长整数给你而#不会报错。##float VS double#C 语言有单精度和双精度两种浮点类型。 Python 的浮点类型实际上是C 语言的双精度浮#点类型。 Python 认为同时支持两种浮点类型的好处与支持两种浮点类型带来的开销不成比例,#所以Python 决定不支持单精度浮点数。对那些宁愿放弃更大的取值范围而需要更高精确度的#用户来说, Python 还有一种十进制浮点数类型 Decimal, 不过你必须导入decimal 模块才可#以使用它。浮点数总是不精确的。Decimals 则拥有任意的精度。在处理金钱这类确定的值时,#Decimal 类型就很有用。 在处理重量,长度或其它度量单位的场合, float 足够用了。


  

  

  -------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Weibo: http://weibo.com/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(满);  DBA2 群:62697977(满)  DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群: 83829929(满) DBA5群: 142216823(满)
DBA6 群:158654907(满) 聊天 群:40132017(满)  聊天2群:69087192(满)
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-368880-1-1.html 上篇帖子: Build Python C Extension with Mingw 下篇帖子: python之函数基础
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表