欢迎来到天天文库
浏览记录
ID:37540852
大小:598.92 KB
页数:34页
时间:2019-05-24
《《python完成常见的任务》》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第九章本章内容:●数据结构操作●文件操作●操作程序用Python完成●与Internet相关的任务●较大的例子常见的任务●练习现在,我们已学习了Python的语法,它的基本的数据类型,和很多我们喜欢的Python的库函数。本章假设你至少理解了这门语言的所有基本成分,并且除了Python的优雅和“酷”的方面外,也了解了它实用的方面。我们将介绍Python程序员要面对的常见的任务。这些任务分为——数据结构操作,文件操作等等。数据结构操作Python的最大的特点之一是它把列表、元组和字典作为内置类型。它们非常灵活
2、和容易使用,一旦你开始使用它们,你将发现你会不由自主地想到它们。内嵌(inline)拷贝由于Python引用的管理模式,语句a=b并没有对b引用的对象作拷贝,而只是对那个对象产生了新的引用。有时需要一个对象的新的拷贝,而不只是共享一个引用。怎样做到这一点依赖于对象的类型。拷贝列表和元组的最简单的方式有点奇怪。如果myList是一个列表,那么要对它做拷贝,你可以用:newList=myList[:]你可以理解为“从开始到结尾的分片”,因为我们在第二章“类型和操作符”里学272用Python完成常见的任务273
3、到,一个分片开始的缺省索引是序列的开始(0),而缺省的结尾是序列的结尾。由于元组支持同样的分片操作,这个技术也适用于拷贝元组。而字典却不支持分片操作。为了拷贝字典myDict,你可以用:newDict={}forkeyinmyDict.keys():newDict[key]=myDict[key]这个操作很常见,所以在Python1.5里为字典对象增加了一个新方法来完成这个任务,就是copy()方法。所以前面的代码可以替换为一句话:newDict=myDict.copy()另一个常见的字典操作现在也是标准的
4、字典特性了。如果你有一个字典oneDict,而想用另一个不同的字典otherDict的内容替换它,只需要用:oneDict.update(otherDict)这与下面的代码相同:forkeyinotherDict.keys():oneDict[key]=otherDict[key]如果在update()操作前oneDict与otherDict共享一些键时,在oneDict中的键关联的旧值将被删除掉。这也许是你所想要的(通常是这样,这也是为什么选择这个操作并称之为update()的原因)。如果这不是你期望的,
5、那么要做的也许是抱怨(引发异常),如下:defmergeWithoutOverlap(oneDict,otherDict):newDict=oneDict.copy()forkeyinotherDict.keys():ifkeyinoneDict.keys():raiseValueError,"thetwodictionariesaresharingkeys!"newDict[key]=otherDict[key]returnnewDict或者把二者的值结合为一个元组,例如:defmergeWithOver
6、lap(oneDict,otherDict):newDict=oneDict.copy()274第九章forkeyinotherDict.keys():ifkeyinoneDict.keys():newDict[key]=oneDict[key],otherDict[key]else:newDict[key]=otherDict[key]returnnewDict为了说明前面三个算法的不同,考虑下面两个字典:phoneBook1={'michael':'555-1212','mark':'554-1121'
7、,'emily':'556-0091'}phoneBook2={'latoya':'555-1255','emily':'667-1234}如果phoneBook1可能是过时的,而phoneBook2更新一些但不够完整,那么正确的用法可能是phoneBooke1.update(phoneBook2)。如果认为两个电话本不应该有重复的键时,使用newBook=mergeWithoutOverlap(phoneBook1,phoneBook2)可以让你知道假设是否有错。最后一种,如果一个是家里的电话本而另一个是
8、办公室的电话本,那么只要是后续的引用newBook['emily']的代码能够处理newBook['emily']是元组('556-0091','667-1234')这一事实,就可以用:newBook=mergeWithoutOverlap(phoneBook1,phoneBook2)拷贝:copy模块回到拷贝主题上来:[:]和.copy()技巧适用于90%的情况。如果你正按照Python的精神,编写可以处理任何
此文档下载收益归作者所有