版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PythonPythonPython使用对象模型来数据。构造任何类型的值都是一个对象。尽管Python通常当成一种“面向对象的编程语言”,但你完全能够写出不使用任何类和实例的实用。不过PythonPython:值新风格的类型和类,对象的类型也是可以改变的,不过对于初学者并不推荐这样做。(mutability要一个对象还没有被销毁,这些特性就一直存在。程序的需求。绝大多数应用程序通常使用标准类型,对特定的数据则通过创建和实例化类(method数字(分为几个子类型,其中有三个是整型数据类型,我们会在第5、67章详细介绍它们。Null类不能也不应该和数据保存在一起,所以类型定义成对象。我们仔细研究一下这个例子,请注意看type输出结果<type'int'>。不过你应当它并不是一个简简单单的告诉你42是个整数这样的字符串。您看到的<type'int'>实际上是一个类型对象,碰巧它输出了一个字符串来告诉你它是个int型对象。(metaclassPython2.2更加重要的角色。从现在起,类就是类型,实例是对应类型的对象。Javavoidnull值。下列对象的布尔值是False。00.0+0.0jnonzero(nonzero())或length(len())0,那么它们的布尔值就是False。帧档和文档获得更详尽的信息。execeval(14代码对象本身不包含任何执行环境信息,它是用户自定义函数的,在被执行时动态C当你的代码出错时,Python就会一个异常。如果异常未获和处理,解释器就会退出运行,显示类似下面的诊断信息:自己的处理程序,处理程序就可以这个记录对象。start2:end2],或使用省略号,sequence[...,start1:end1].切片对象也可以由内建slice()来生成。步进切片允许利用第三个切片元素进行步进切片,它的语法为sequencePythonPython2.3CAPIJythonNullNone,Ellipsis,XRange关于range()和xrange()的使用信息。TrueFalsePython2.3布尔类型,所以会看到比较结果为整型值1(True)或0(False。>>>3<4<7#sameas(3<4)and(4<7)>>>4>3==3#sameas(4>3)and(3==3)>>>4<3<5!=2<本身。在后面的部分我们会研究对象的比较。表 标准类型值比较运算 expr1expr2expr1expr2expr1expr2expr1expr2expr1expr2expr1expr2注 未来很有可能不再支持<>运算符,建议您一直使用!=运算符象的其它也会随之改变。1:foo1foo2当你从值的观点看这条语句时,它表现的只是一个多重赋值,将4.3这个值赋给了foo1图4-1演示了一个对象两个。4–1foo1foo22:foo1foo2foo1=4.3foo2=foo1时,foo2被指向foo1所指向的同一个对象,这是因为Python通过传递来象。示意图也和图4-1一样。3:foo1foo2foo1.foo2.立的对象,其中foo1是第一个对象的,foo2则是第二个对象的。图4-2演示给我贴了一个,表示创建了一个。每当这个对象有了一个新的,就会在盒子上新贴一张。当一个被销毁时,这个就会被撕掉。当所有的都被撕掉时,这个盒子就会被回收。那么,Python是怎么知道这个盒子有多少个呢?图 foo1和foo2指向不同的对ais对象比较运算符拥有同样的优先级,表4.2列出了这些运算符。在下面这个例子里,>>>b=>>>bisnotPython表4.2标准类型对象比较运算符 obj1is obj1isnot >>>a=>>>b=在上面的例子中,abcdabcd一样,因为我们本意就是为了创建两个整数对象,而不是像b=a这样的结果。我们在写作本书的时候,Python1,100),不过这个范围是会改变的,所Python2.3中决定,在预定义缓存字符串表之外的字符串,如果不再有任何指向它,收器一样可以回收不再被使用的字符串。从Python1.5起提供的用于缓存字符的内建函数intern()也已经不再推荐使用,即将被废弃。andornotPython4.3.notandor4.3 notexpr expr的逻辑非(否)expr1andexpr2 >>>x< 多个隐式的and连接起来的多个表达式。>>>3<4<7#sameas"(3<4)and(4<7)"cmp(),repr(),str(),type(),和等同于repr()函数的单反引号(``)运算符。表4.4 i>0ifobj1>i==0ifobj1==obj2 type()Python2.2type()当成一个内建函数来看。type()的用法如下:type() type()type()type().注意type()有趣的Python这种形式显示的对象通常会提供对象类别,对象id或位置,或者其它合适的信息。义对象。如果是用户自定义对象,cmp()会调用该类的特殊方法cmp()。在第13章会详细介绍类的这些特殊方法。下面是几个使用cmp()内建函数的对数值和字符串对象进行比较的例>>>b=strrepr``内建函数str()和repr()或反引号运算符(``)可以方便的以字符串的方式获取对象的串通常可以用来重新获得该对象,通常情况下obj==eval(repr(obj))这个等式是成立的。这两个函数接受一个对象做为其参数,返回适当的字符串。在下面的例子里,我们会随机取一些Python对象来查看他们的字符串表示。>>>str(2e10)尽管str(),repr()和``运算在特性和功能方面都非常相似,事实上repr()和``做的eval()str()则有所不同。str()于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值,但很适printrepr()返回的字符串都能够用repr()Pythonstr()的输出对人比较友好。虽然如此,号(**)pow()内建函数,x**y和pow(x,y)执行的都是xy次方。typePython认接收到的类型对象的有很多时候都是很有用的。为了达到此目的,Python提供了一个type().type()Python过交互式解释器来看几个使用type()内建函数返回多种对象类型的例子:>>>s= <class'main 随后我们讨论type()的使用以及怎么将这个例子移植为改用isinstance()。typechk.py,-69isanumberoftype:xxxisnotanumberatall!!例 检查类型函数disyNumType()接受一个数值参数,它使用内建函数type()来确认数值的类(一个数值类型2 都会付出性能代价,如果我们能减少函数的调用次数,就会提高程序的性能。利用在本章我们前面提到的types模块,我们还有另一种比较对象类型的方法,那就是type用每次计算出这个对象来。那么我们现在修改一下代码,改为只调用一次type()函数:对象值比较VS对象比在这一章的前面部分我们讨论了对象的值比较和比较,如果你了解其中的关键点,你就会发现我们的代码在性能上还不是最优的.在运行时期,只有一个类型对象来表示整数类型.也就是说,type(0),type(42),type(-100)都是同一个对象:<type'int'>(types.IntType也是这个对象)如果它们是同一个对象,我们为什么还要浪费时间去获得并比较它们的值呢(我们已经知道它们是相同的了!)?所以比较对象本身是一个更好地方案.下面是改进后的代码:这样做有意义吗?我们用对象的比较来替代对象值的比较。如果对象是不同的,那意这是一个对前一个例子较小的改进,如果你的程序像我们的例子中做很多次比较的话,程序的性能就会有一些差异。为了得到整数的对象类型,解释器不得不首先查找typesIntTypefrom-import,你可以减少一次查询:Python2.2对类型和类的统一导致isinstance()内建函数的使用率大大增加。在第13章(面向对象编程)正式介绍isinstance(),在这里我们简单浏览一下。intisinstance()typechk.pyisinstance()isinstance()接受一个类型对象的元组做为参数,这样我们就不必像使用type()时那样写一堆if-elif-else判断了。4.54.5StringBuilt‐incmp(obj1,ComparestwoStringStringDeterminesobjectValue<Less>GreaterLessthanorequalGreaterthanorequalNotequalNotequalObjectThesameisNotthesameBooleanLogicalLogicalLogical布尔比较总是返回True或Python2.2统一了类型和类,所有的内建类型现在也都是类,在这基础之上,原来的int(),type(),list()们看上去有点象函数,实质上他们是类。当你调用它们时,实际上是生成了该类型的一个实例,就象工厂生产货物一样。int(),long(),float(),str(),unicode(),list(),set(),实上,几个类型共享某一些的特性,比如功能的实现,另一些类型则在数据值方面有一些共同之处。我们感的还有这些类型的数据如何更新以及它们能提供什么样的。器类型又带来一个新问题,那就是它是否可以容纳不同类型的对象。所有的Python容器对象都能够容纳不同类型的对象。表4.6按模型对Python的类型进行了分类。Python并没有字符类型(参见章节4.8表4.6 分 Python类, 后,它的值可以进行更新吗?”面我们介绍Python数据类型时曾经提到,某些类型允许x='Pythonnumbersandstrings'i=0i=i+些对象。你可以通过内建函数id()来确认对象的在两次赋值前后发生了变化。4.7以更新模型为标准的类型分类分 Python类 >>>i=>>>i=i+你看到的数字很可能和我不同,每次执行这些数字也会不同,这是正常的。这个数字象。另一类对象,列表可以被修改而无须替换原始对象,看下面的例子:ID 型。对这种目的,我们使用模型。也就是说根据我们的数据的方式对数据类型进行分类。在模型中共有三种方式:直接存取,顺序,和映射。表4.8按方式对数序列类型是指容器内的元素按从0开始的索引顺序。一次可以一个元素或多个元类型的特殊运算符,内建函数,及方法都会在相应的章节特别说明。Python就是这有助于搞清楚某种类型应该具有什么行为。举例来说,如果我们基本上不用问自己“列表4.7 分 Python类 字 典4.9模型另一个问题就是,“为什么要用这么多不同的模型或从不同的方面来分类?”所有这些有的数值子类型做到了这一点,所以它们归纳到一类当中)。最后,我们确信搞清所有符串表示字符或8比特整数。 在Python中,一切都是指针。intvsshortvsPythonCint,short,longPythonfloatVSCPythonC所以Python决定不支持单精度浮点数。对那些宁愿放弃更大的取值范围而需要更高精确度的PythonDecima
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智能化住宅租赁合同4篇
- 2025年瓮福国际贸易股份有限公司招聘笔试参考题库含答案解析
- 2025年山东潍坊国投集团有限公司招聘笔试参考题库含答案解析
- 2025年度房屋买卖合同中智能家居系统配置协议
- 2025年统编版2024八年级地理下册月考试卷含答案
- 辽宁省沈阳市浑南区2024-2025学年九年级上学期期末语文试题
- 2024年度青海省公共营养师之四级营养师考前冲刺模拟试卷A卷含答案
- 2024年度青海省公共营养师之三级营养师题库练习试卷A卷附答案
- 2024年度青海省公共营养师之二级营养师真题练习试卷A卷附答案
- 2024-2025学年高中历史专题7苏联社会主义建设的经验与教训7.3苏联社会主义改革与挫折课时作业含解析人民版必修2
- JB-T 8532-2023 脉冲喷吹类袋式除尘器
- 深圳小学英语单词表(中英文)
- 护理质量反馈内容
- 山东省济宁市2023年中考数学试题(附真题答案)
- 抖音搜索用户分析报告
- 板带生产工艺热连轧带钢生产
- 钻孔灌注桩技术规范
- 2023-2024学年北师大版必修二unit 5 humans and nature lesson 3 Race to the pole 教学设计
- 供货进度计划
- 国际尿失禁咨询委员会尿失禁问卷表
- 弥漫大B细胞淋巴瘤护理查房
评论
0/150
提交评论