




已阅读5页,还剩77页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python程序开发,信息管理部王辉,Python背景介绍,课程导航,起源,作者:GuidoVanRossum(GvR)/guido/名字的读法“仁慈的终身独裁者”BenevolentDictatorForLife他持续关注Python的开发进程,指导支持Python开源社区的活动,并在必要的时刻做出决定。目前在Google工作,得名,“1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间。我的办公室会关门,但我有一台家用电脑,而且没有太多其它东西。我决定为当时我正构思的一个新的脚本语言写一个解释器,它是ABC语言的后代,对UNIX/C程序员会有吸引力。作为一个略微有些无关想法的人,和一个蒙提派森(MontyPython)的飞行马戏团的狂热爱好者,我选择了Python作为项目的标题。”,每个人都会,ComputerProgrammingforEverybody1999年,Guido向DARPA阐述Python语言的特性:简单、直观、强大开源,以便任何人都可以为它做贡献代码像纯英语那样容易理解适用于短期开发的日常任务这些想法中的一些已经成为现实。Python已经成为一门流行的编程语言,尤其是在互联网环境下。,Python启示录,Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。TIOBE语言排行第八,Google的第三大开发语言,Dropbox的基础语言,豆瓣的服务器语言。,Python背景介绍,课程导航,特性,交互式命令行(Interactiveconsole)不只是脚本强大易用的标准库胶水语言(gluelanguage)收放自如(scalability)不要括号vsPerlvsRuby,交互式命令行(Interactiveconsole),Python可以单步直译运行。运行Python解释器进入交互式命令行的环境,你可以在提示符号旁输入代码,按Enter键输出结果:print(Hello,Python!)Hello,Python!有点像Shell脚本的执行方式。,不只是脚本,原因是“脚本语言”泛指仅作简单编程任务的语言,如Linuxshellscript、JavaScript等,它们只能处理简单的任务而Python是面向对象编程(OOP)的,支持异常处理和类型检查Python的支持者较喜欢称它为一种高阶动态编程语言,强大易用的标准库,核心库不超过10MbHtml、Xml解析:BeautifulSoup,Expat字符串处理:字典、数组切片、正则表达式re单元测试:PyUnit代码版本控制:PySVN网络访问:urllib2图形模块:Tkinter、PyTCL、WxPython串行化、多线程等扩展标准库十分容易,胶水语言(gluelanguage),Python经常用作将不同语言编写的程序“粘”在一起的胶水语言。Google内部的很多项目使用C+编写性能要求极高的部分,然后用Python调用相应的模块。C/C+:Boost.Python使得Python和C+的类库能互相调用(.pyc)Java:Jython是用Java实现的Python,可同时使用二者的类库.NET:IronPython是Python在.NET平台上的版本。,收放自如(scalability),Python内建的数据结构(variable,list和dict)以及对多线程分布式操作的支持,使得程序可以用相同的代码处理不同规模的数据,以及并发的用户需求。GoogleAppEngine,不要括号,Python使用缩进而不是括号来进行代码段标识,减少了视觉上的混乱,并且使程序变短,从而提高了程序的可读性。,vs.Perl,Perl是另一种广泛使用(滥用)的动态高级语言,经常被用来与Python比较。正则表达式的典范催生了CGI、PHP黑客最喜爱的语言LarryWallPerl语言之父,语言学家/larry/两届国际C语言混乱代码大赛(IOCCC)的冠军第一届自由软件奖得主,程序员的三大美德,懒惰:能让人尽量减少总能量支出的美德。它使你写出节省脑力、可以重用的代码;也督促你为程序写注释和文档,那样你就不用回答各种问题。所以它是程序员的第一大美德。所以有了这本书。参见下两条。不耐烦:当电脑想偷懒时你爆发的怒气.它使你写的代码能主动预测、而非被动满足用户需求,至少装作是这样。所以它是程序员的第二大美德。参见懒惰和傲慢。傲慢:自傲到人神共愤的程度,也是一种品质,能使你编写(维护)的程序让人无可指摘。所以它是程序员的第三大美德.参见前两条。,观点,Perl之父LarryWall:“做一件事有很多种方法”Python资深开发者TimPeters:“做一件事,应该有一种最直观的方法,而且最好只有一种。”Python之父GuidoVanRossum:“做一件事情只有一种方法”,vs.Ruby,Ruby:比Python更年轻的动态语言完全面向对象支持正则表达式整合了多种语言的优势RubyonRails网站快速开发工具松本行弘(“Matz”)“不要重复自己”,国籍,用途,脚本程序大型程序的原型开发科学计算网络应用计算机图形编程,知名的Python应用,Zope:一个应用程序服务器,具有内容管理、团队开发、XML、面向对象、SOAP接口等一系先进特性,开源。Gadfly:一个用Python写的面向对象关系型数据库,具有小巧、快速、可移植性好的特点,具有大部分SQL语言特性。开源。Wallbase:Python编写的图片站点。uTorrent:BitTorrent下载软件,主程序仅2Mb,支持ipv6地址解析。开源。Torchlight:Python编写的大型3D游戏,原Blizzard公司人员制作发行,开源。,GoogleAppsEngine,“GoogleAppEngine可让您在Google的基础架构上运行您的网络应用程序。AppEngine应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展。使用GoogleAppEngine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务。”Python为GAE的数据存储区、Google帐户、网址抓取和电子邮件服务提供了丰富的PythonAPI。GAE还提供了一个称为webapp的简单Python网络应用程序框架,从而可以轻松开始构建应用程序。,GAE的主要服务,动态网络服务,提供对常用网络技术的完全支持持久存储空间,支持查询、分类和事务自动扩展和负载平衡用户身份验证和使用Google帐户发送电子邮件的API一套在本地模拟GAE的开发环境用于在指定时间和定期触发事件的计划任务,Python背景介绍,课程导航,HelloWorld例子,在hello.py中写入如下,并保存:print(HelloWorld!)退出文本编辑器,然后在命令行输入:pythonhello.py可以看到Python随后输出:HelloWorld!,基本数据类型,a=10#int整数a=1.3#float浮点数a=True#真值(True/False)a=Hello!#字符串。字符串也可以用双引号。,for循环,for元素in序列:statement例子:forain3,4.4,life:printa,while循环,while条件:statement举例:whilei=0次+重复=1次?重复0或者1次m重复m次。比如说a4相当于aaaa,再比如说1-32相当于1-31-3m,n重复m到n次。比如说a2,5表示a重复2到5次。小于m次的重复,或者大于n次的重复都不符合条件。,正则表达式,正则表达相符的字符串举例0-93,59678a?bba+baaaaab,正则表达式,正则表达式的常用语法:1)单个字符:.任意的一个字符a|b字符a或字符bafga或者f或者g的一个字符0-40-4范围内的一个字符a-fa-f范围内的一个字符m不是m的一个字符s一个空格S一个非空格d0-9D0-9w0-9a-zA-ZW0-9a-zA-Z,2)重复紧跟在单个字符之后,表示多个这样类似的字符*重复=0次+重复=1次?重复0或者1次m重复m次。比如说a4相当于aaaa,再比如说1-32相当于1-31-3m,n重复m到n次。比如说a2,5表示a重复2到5次。小于m次的重复,或者大于n次的重复都不符合条件。,正则表达相符的字符串举例0-93,59678a?bba+baaaaab,两个例子,“集体智慧编程”根据品味相似度进行电影推荐(第2章)家族旅行问题的最优化算法(第5章),根据品味相似度进行电影推荐,基本思路:从一大群人中找出与我们品味相近的一小群人,对这些人所喜爱的其他内容进行考查,并把它们组合起来创建一个经过排名的推荐列表。(协作过滤CollaborativeFiltering)步骤:1.搜集偏好2.寻找相似的用户3.推荐电影,搜集偏好,首先找到一种表示不同人及其偏好的电影的方法。可以使用人对几部电影的评分来刻画他们的偏好,评分从1到5,分数越高,表示某人对该电影越喜欢。如何建立这种从人到电影的对应关系?Python中有一个很简单的方法来表示这种数据结构:使用嵌套的字典。,搜集偏好,创建名为recommandations.py的数据文件:critics=LisaRose:LadyintheWater:2.5,SnakesonaPlane:3.5,JustMyLuck:3.0,SupermanReturns:3.5,You,MeandDupree:2.5,TheNightListener:3.0,GeneSeymour:LadyintheWater:3.0,SnakesonaPlane:3.5,JustMyLuck:1.5,SupermanReturns:5.0,TheNightListener:3.0,You,MeandDupree:3.5Toby:SnakesonaPlane:4.5,You,MeandDupree:1.0,SupermanReturns:4.0,搜集偏好,我们可以使用交互控制台对字典的数据进行查询和修改:fromrecommendationsimportcriticscriticsLisaRoseLadyintheWater2.5criticsTobySnakesonaPlane=4.5criticsTobySnakesonaPlane:4.5,You,MeandDupree:1.0,寻找相似的用户,收集了人们的偏好数据后,我们需要方法来计算某两个人电影品味的相似度。有两种基本的方法可以实现这个目的:欧几里得距离皮尔逊相关度,欧几里得距离评价,以二维空间中的情形为例:设坐标轴为人们都评价过的两部电影,然后将参与评价的人根据他们对这两部电影的评分绘制到图上,并考察他们彼此间的距离,如图:图中的点距离越近,表明两个人的偏好越接近。推广到多维向量空间,欧几里得法可表示为:计算每一轴上两点的差值求平方,再将各轴相加,最后取平方根。,欧几里得距离评价,如计算Toby和LaSalle的距离:frommathimportsqrtsqrt(pow(5-4,2)+pow(4-1,2)3.1622776601683795为了给偏好接近的情况给出较大的值,可取该值的倒数,并+1避免除数为0:1/(1+sqrt(pow(5-4,2)+pow(4-1,2)0.2402530733520421,欧几里得距离评价,使用这种方法构造出如下相似度函数:defsim_distance(prefs,person1,person2):#得到共同的电影si=foriteminprefsperson1:ifiteminprefsperson2:siitem=1#如果没有共同的电影则返回0iflen(si)=0:return0#计算欧几里得距离,返回相似度Sum_of_squares=sum(pow(prefsperson1item-prefsperson2item,2)foriteminprefsperson1ifiteminprefsperson2)return1/(1+sum_of_squares),皮尔逊相关度,皮尔逊相关系数是一种更复杂的方法,它通过计算两组数据与某一直线拟合的程度来判断它们的相似程度。该方法有助于克服所谓的“夸大评价”现象对结果的影响。右图中,虽然Jack对电影的评价比Lisa更为极端(更容易给出高分和低分),但这个坐标系中的点都相当靠近拟合曲线(图中虚线),可以说两人的品味较为相近。,皮尔逊相关度,使用如下函数计算皮尔逊相关度,该函数返回一个-1到1的值:defsim_pearson(prefs,p1,p2):#得到共同评价的电影si=foriteminprefsp1:ifiteminprefsp2:siitem=1#如果没有共同评价的电影,返回0iflen(si)=0:return0#将两人的偏好相加sum1=sum(prefsp1itforitinsi)sum2=sum(prefsp2itforitinsi),皮尔逊相关度,#计算平方和sum1Sq=sum(pow(prefsp1it,2)foritinsi)sum2Sq=sum(pow(prefsp2it,2)foritinsi)#计算对应项的乘积和pSum=sum(prefsp1it*prefsp2itforitinsi)#计算皮尔逊相关度num=pSum-(sum1*sum2/n)den=sqrt(sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n)ifden=0:return0r=num/denreturnr,皮尔逊相关度,在交互式控制台中使用上述两种计算方法:reload(recommendations)recommendations.sim_distance(recommendations.critics,.LisaRose,GeneSeymour)0.148148148148recommendations.sim_pearson(recommendations.critics,.LisaRose,GeneSeymour)0.396059017191,给评论者打分,有了对两个人进行比较的函数,下面就可以找出与某人品味最接近的人了,进而,可以根据这些人的喜好来推荐电影。deftopMatches(prefs,person,n=5,similarity=sim_pearson):scores=(similarity(prefs,person,other),other)forotherinprefsifother!=person#对list排序,相似度最高的人排在最前scores.sort()scores.reverse()returnscores0:n在交互控制台中使用该函数:recommendations.topMatches(recommendations.critics,Toby,n=3)(0.99124070716192991,LisaRose),(0.92447345164190486,MickLaSalle),(0.89340514744156474,ClaudiaPuig),推荐电影,我们固然可以选择只看那些和我们品味相近的人推荐的电影,但这样做太武断,也许某部电影大家普遍都觉得不错,而恰好与我们最相近的那个人没有看过。所以,我们需要一种对推荐人进行加权的推荐,如下表:给Toby的电影推荐表,推荐电影,S.X打头的列是经过加权的电影评分。下面的代码给出了上述过程的具体实现:defgetRecommendations(prefs,person,similarity=sim_pearson):totals=simSums=forotherinprefs:#不和自己比ifother=person:continuesim=similarity(prefs,person,other)#忽略小于等于0的评分ifsimreload(recommendations)recommendations.getRecommendations(recommendations.critics,Toby)(3.3477895267131013,TheNightListener),(2.8325499182641614,LadyintheWater),(2.5309807037655645,JustMyLuck)recommendations.getRecommendations(recommendations.critics,Toby,.similarity=recommendations.sim_distance)(3.5002478401415877,TheNightListener),(2.7561242939959363,LadyintheWater),(2.4619884860743739,JustMyLuck)结果显示,人们为Toby推荐了三部电影,而且用两种相似度地算方法得到的列表是一样的。,总结,到此为止,我们建立了一个完整的推荐系统,它适用于任何的商品推荐以及基于相似度的数据关系挖掘。而这一切在Python中,仅仅是建立一个涉及人、商品以及评价值的字典,然后根据某些相似度算法得出的人与人的相似度,就可以进行推荐了。,Python背景介绍,课程导航,家族旅行问题的最优化算法,问题描述:Glass一家住在美国不同的地方。他们希望在纽约相聚,在同一天从各地坐飞机到纽约,几天后再一起离开。每天有许多往返的航班,起飞时间、价格以及飞行时间都不相同。现在需要找到一种好的日程安排,使得大家的旅行花费尽可能少、等待亲友的时间尽可能短、乘坐飞机的时间尽可能短。建立文件optimization.py,加入如下代码:people=(Seymour,BOS),(Franny,DAL),(Zooey,CAK),(Walt,MIA),(Buddy,ORD),(Les,OMA)#目的地:纽约LaGuardia机场destination=LGA,问题分析,首先要找到一种通用的表示日程安排方案的方法。然后,为了描述某种方案的好坏,需要定义某种函数。在优化问题中,这个函数叫做代价函数(costfunciton)。一个方案越好,它的代价函数值越小。这样找最优方案的问题转化为找代价函数值最小的方案的问题。最后设法找出具有最小代价函数值的方案,完成优化过程。,导入数据,从网址origin,dest,depart,arrive,price=line.strip().split(,)flights.setdefault(origin,dest),)#将航班详情加入到航班字典的值中flights(origin,dest).append(depart,arrive,int(price),描述方案,如何描述各种方案呢?一个通用的方法是使用数字列表,它使得之后描述的优化算法并不依赖于具体的问题。本例中,用数字表示某人乘坐当天的第几趟航班,0代表第一趟,1代表第二趟,以此类推。由于每个人都要选择往和返两趟班机,所以列表的总长是人数的两倍。例如:1,4,3,2,7,3,6,3,2,4,5,3该方案表示Seymour坐第2趟航班去纽约,坐第5趟航班回波士顿Franny坐第4趟航班去纽约,坐第3趟回达拉斯。,代价函数,代价函数的选取是优化算法的重要环节。本例中,可以综合考虑如下因素来构造代价函数:价格:所有航班的总票价旅行时间:所有人在飞机上度过的总时间等待时间:在机场等待其他成员到达的总时间出发时间:早晨太早起飞的航班有额外的代价,因为旅行者睡眠不足汽车租用时间:如果集体租车,那么他们最好在某个时间前将车归还,否则会多付租金。,代价函数,限于篇幅,就不给出代价函数的全部代码了,使用方法如下:reload(optimization)optimization.schedulecost(s)5285有了代价函数,下面就是找到具有最小函数值的方案了。在这个例子中有16个航班、每个航班都有9种可能,所有的可能数为916,约3000亿,所以穷举是不现实的。下面使用两种方法实现优化:随机优化爬山法,随机优化,随机生成一些方案,找出其中最好的方案。defrandomoptimize(domain,costf):best=999999999bestr=Noneforiinrange(1000):#随机生成一个方案r=random.randint(domaini0,domaini1)foriinrange(len(domain)#计算代价cost=costf(r)#与当前最优方案的代价比较ifcostdomainj0:neighbors.append(sol0:j+solj+1+solj+1:)ifsoljreload(optimization)domain=(0,8)*(len(optimization.people)*2)s=optimization.randomoptimize(domain,optimization.schedulecost)optimization.schedulecost(s)3328optimization.printschedule(s)SeymourBoston12:34-15:02$10912:08-14:05$142FrannyDallas12:19-15:25$3429:49-13:51$229ZooeyAkron9:15-12:14$24715:50-18:45$243WaltMiami15:34-18:11$32614:08-16:09$232BuddyChicago14:22-16:32$12615:04-17:23$189LesOmaha15:03-16:42$1356:19-8:13$239,查看结果,s=optimization.hillclimb(domain,optimization.schedulecost)optimization.schedulecost(s)3063optimization.printschedule(s)SeymourBOS12:34-15:02$10910:33-12:03$74FrannyDAL10:30-14:57$29010:51-14:16$256ZooeyCAK10:53-13:36$18910:32-13:16$139WaltMIA11:28-14:40$24812:37-15:05$170BuddyORD12:44-14:17$13410:33-13:11$132LesOMA11:08-13:07$17518:25-20:34$205,总结,在本例中,首先使用Python的列表对不同的方案进行了数学建模,然后根据一些指标建立了代价函数,最后使用两种方法实现了优化过程。在整个过程中,Python的简单易用让我们能够集中精力解决实际的问题。而无需过多关注编程本身。此外,Python的交互控制台使得编程与调试过程变得自然顺畅。,硬币的另一面,限制Python发展的因素缺乏预包装的解决方案数据库访问层的局限性文档差距缺乏GUI和团队协作工具,限制Python发展的因素,缺乏预包装的解决方案PHP在企业软件领域赢得了辉煌的成功,主要原因就在于其广泛实用的产品门类,比如讨论板、聊天服务器和分组日历以及即时消息系统等。相比之下,Python提供的解决方案就少多了。Python语言的分发版中确实包含了一些扩展的类库,越来越多的程序员也在致力于开发等价PHP的Python工具,但是考虑到市场的时间紧迫性,而且你所面临的问题已经有现成的PHP解决方案可以对付,那么PHP自然会成为你的首选。,限制Python发展的因素,数据库访问层的局限性相比现有的成熟技术,比如ODBC和JDBC,Python的数据库访问层看起来就过于原始了。虽然这一方面也在发生变化,但是,开发部门需要平滑地接合现有的复杂遗留数据,同时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年水资源保护法规管道工职业技能鉴定试卷
- 山西工程技术学院《大美劳动》2024-2025学年第一学期期末试卷
- 广东海洋大学《三维模型立体表现基础》2024-2025学年第一学期期末试卷
- 长江师范学院《机械设计Ⅲ》2024-2025学年第一学期期末试卷
- 2025年汽车工程专家面试模拟题及答案大全
- 昆明工业职业技术学院《机器人》2024-2025学年第一学期期末试卷
- 福建商学院《工程伦理:安全》2024-2025学年第一学期期末试卷
- 保定市幼儿教师职业满意度调查研究
- 淮阴师范学院《晚清史专题》2024-2025学年第一学期期末试卷
- 2025年特岗教师招聘考试初中体育备考指南及策略
- NBT 47013.13-2015 承压设备无损检测 第13部分:脉冲涡流检测
- 2023全球数字经济白皮书
- 2024年三亚市海棠区营商环境建设局一级科员招录1人《行政职业能力测验》高频考点、难点(含详细答案)
- 2024-2030年中国培南类抗菌药物行业市场运行态势及发展战略研究报告
- 知识题库-人社练兵比武竞赛测试题及答案(七)
- 陆上石油天然气开采安全管理人员复习题
- 孔子的美学思想对现代设计的启示
- 回弹法测试原始记录表
- 《热力发电厂》热力发电厂全面性热力系统
- 新教师岗前培训讲座中小学教学常规PPT
- 2023年国家电网公司电力安全工作规程(变电部分)2023年6月修订
评论
0/150
提交评论