




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python 新语言 新平台 杨帆 1 大纲 起源特性用途不足如何学习 APeraGlobalCompany 2009PERAChina 2 起源 作者 GuidoVanRossum GvR http www python org guido 名字的读法 仁慈的终身独裁者 BenevolentDictatorForLife他持续关注Python的开发进程 指导支持Python开源社区的活动 并在必要的时刻做出决定 目前在Google工作 3 得名 1989年12月 我在寻找一门 课余 编程项目来打发圣诞节前后的时间 我的办公室会关门 但我有一台家用电脑 而且没有太多其它东西 我决定为当时我正构思的一个新的脚本语言写一个解释器 它是ABC语言的后代 对UNIX C程序员会有吸引力 作为一个略微有些无关想法的人 和一个蒙提 派森 MontyPython 的飞行马戏团的狂热爱好者 我选择了Python作为项目的标题 4 每个人都会 ComputerProgrammingforEverybody1999年 Guido向DARPA阐述Python语言的特性 简单 直观 强大开源 以便任何人都可以为它做贡献代码像纯英语那样容易理解适用于短期开发的日常任务这些想法中的一些已经成为现实 Python已经成为一门流行的编程语言 尤其是在互联网环境下 5 大纲 起源特性用途不足如何学习 APeraGlobalCompany 2009PERAChina 6 特性 交互式命令行 Interactiveconsole 不只是脚本强大易用的标准库胶水语言 gluelanguage 收放自如 scalability 不要括号vsPerlvsRuby 7 交互式命令行 Interactiveconsole Python可以单步直译运行 运行Python解释器进入交互式命令行的环境 你可以在提示符号 旁输入代码 按Enter键输出结果 print Hello Python Hello Python 有点像Shell脚本的执行方式 8 不只是脚本 原因是 脚本语言 泛指仅作简单编程任务的语言 如Linuxshellscript JavaScript等 它们只能处理简单的任务而Python是面向对象编程 OOP 的 支持异常处理和类型检查Python的支持者较喜欢称它为一种高阶动态编程语言 9 强大易用的标准库 核心库不超过10MbHtml Xml解析 BeautifulSoup Expat字符串处理 字典 数组切片 正则表达式re单元测试 PyUnit代码版本控制 PySVN网络访问 urllib2图形模块 Tkinter PyTCL WxPython串行化 多线程等扩展标准库十分容易 10 胶水语言 gluelanguage Python经常用作将不同语言编写的程序 粘 在一起的胶水语言 Google内部的很多项目使用C 编写性能要求极高的部分 然后用Python调用相应的模块 C C Boost Python使得Python和C 的类库能互相调用 pyc Java Jython是用Java实现的Python 可同时使用二者的类库 NET IronPython是Python在 NET平台上的版本 11 收放自如 scalability Python内建的数据结构 variable list和dict 以及对多线程分布式操作的支持 使得程序可以用相同的代码处理不同规模的数据 以及并发的用户需求 GoogleAppEngine 12 不要括号 Python使用缩进而不是括号来进行代码段标识 减少了视觉上的混乱 并且使程序变短 从而提高了程序的可读性 13 vs Perl Perl是另一种广泛使用 滥用 的动态高级语言 经常被用来与Python比较 正则表达式的典范催生了CGI PHP黑客最喜爱的语言LarryWallPerl语言之父 语言学家www wall org larry 两届国际C语言混乱代码大赛 IOCCC 的冠军第一届自由软件奖得主 14 程序员的三大美德 懒惰 能让人尽量减少总能量支出的美德 它使你写出节省脑力 可以重用的代码 也督促你为程序写注释和文档 那样你就不用回答各种问题 所以它是程序员的第一大美德 所以有了这本书 参见下两条 不耐烦 当电脑想偷懒时你爆发的怒气 它使你写的代码能主动预测 而非被动满足用户需求 至少装作是这样 所以它是程序员的第二大美德 参见懒惰和傲慢 傲慢 自傲到人神共愤的程度 也是一种品质 能使你编写 维护 的程序让人无可指摘 所以它是程序员的第三大美德 参见前两条 15 观点 Perl之父LarryWall 做一件事有很多种方法 Python资深开发者TimPeters 做一件事 应该有一种最直观的方法 而且最好只有一种 Python之父GuidoVanRossum 做一件事情只有一种方法 16 vs Ruby Ruby 比Python更年轻的动态语言完全面向对象支持正则表达式整合了多种语言的优势RubyonRails网站快速开发工具松本行弘 Matz 不要重复自己 17 国籍 18 大纲 起源特性用途不足如何学习 APeraGlobalCompany 2009PERAChina 19 用途 脚本程序大型程序的原型开发科学计算网络应用计算机图形编程 20 知名的Python应用 Zope 一个应用程序服务器 具有内容管理 团队开发 XML 面向对象 SOAP接口等一系先进特性 开源 Gadfly 一个用Python写的面向对象关系型数据库 具有小巧 快速 可移植性好的特点 具有大部分SQL语言特性 开源 Wallbase Python编写的图片站点 uTorrent BitTorrent下载软件 主程序仅2Mb 支持ipv6地址解析 开源 Torchlight Python编写的大型3D游戏 原Blizzard公司人员制作发行 开源 21 GoogleAppsEngine GoogleAppEngine可让您在Google的基础架构上运行您的网络应用程序 AppEngine应用程序易于构建和维护 并可根据您的访问量和数据存储需要的增长轻松扩展 使用GoogleAppEngine 将不再需要维护服务器 您只需上传您的应用程序 它便可立即为您的用户提供服务 Python为GAE的数据存储区 Google帐户 网址抓取和电子邮件服务提供了丰富的PythonAPI GAE还提供了一个称为webapp的简单Python网络应用程序框架 从而可以轻松开始构建应用程序 22 GAE的主要服务 动态网络服务 提供对常用网络技术的完全支持持久存储空间 支持查询 分类和事务自动扩展和负载平衡用户身份验证和使用Google帐户发送电子邮件的API一套在本地模拟GAE的开发环境用于在指定时间和定期触发事件的计划任务 23 两个例子 集体智慧编程 根据品味相似度进行电影推荐 第2章 家族旅行问题的最优化算法 第5章 24 根据品味相似度进行电影推荐 基本思路 从一大群人中找出与我们品味相近的一小群人 对这些人所喜爱的其他内容进行考查 并把它们组合起来创建一个经过排名的推荐列表 协作过滤CollaborativeFiltering 步骤 1 搜集偏好2 寻找相似的用户3 推荐电影 25 搜集偏好 首先找到一种表示不同人及其偏好的电影的方法 可以使用人对几部电影的评分来刻画他们的偏好 评分从1到5 分数越高 表示某人对该电影越喜欢 如何建立这种从人到电影的对应关系 Python中有一个很简单的方法来表示这种数据结构 使用嵌套的字典 26 搜集偏好 创建名为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 5 Toby SnakesonaPlane 4 5 You MeandDupree 1 0 SupermanReturns 4 0 27 搜集偏好 我们可以使用交互控制台对字典的数据进行查询和修改 fromrecommendationsimportcritics critics LisaRose LadyintheWater 2 5 critics Toby SnakesonaPlane 4 5 critics Toby SnakesonaPlane 4 5 You MeandDupree 1 0 28 寻找相似的用户 收集了人们的偏好数据后 我们需要方法来计算某两个人电影品味的相似度 有两种基本的方法可以实现这个目的 欧几里得距离皮尔逊相关度 29 欧几里得距离评价 以二维空间中的情形为例 设坐标轴为人们都评价过的两部电影 然后将参与评价的人根据他们对这两部电影的评分绘制到图上 并考察他们彼此间的距离 如图 图中的点距离越近 表明两个人的偏好越接近 推广到多维向量空间 欧几里得法可表示为 计算每一轴上两点的差值求平方 再将各轴相加 最后取平方根 30 欧几里得距离评价 如计算Toby和LaSalle的距离 frommathimportsqrt sqrt 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 31 欧几里得距离评价 使用这种方法构造出如下相似度函数 defsim distance prefs person1 person2 得到共同的电影si foriteminprefs person1 ifiteminprefs person2 si item 1 如果没有共同的电影则返回0iflen si 0 return0 计算欧几里得距离 返回相似度Sum of squares sum pow prefs person1 item prefs person2 item 2 foriteminprefs person1 ifiteminprefs person2 return1 1 sum of squares 32 皮尔逊相关度 皮尔逊相关系数是一种更复杂的方法 它通过计算两组数据与某一直线拟合的程度来判断它们的相似程度 该方法有助于克服所谓的 夸大评价 现象对结果的影响 右图中 虽然Jack对电影的评价比Lisa更为极端 更容易给出高分和低分 但这个坐标系中的点都相当靠近拟合曲线 图中虚线 可以说两人的品味较为相近 33 皮尔逊相关度 使用如下函数计算皮尔逊相关度 该函数返回一个 1到1的值 defsim pearson prefs p1 p2 得到共同评价的电影si foriteminprefs p1 ifiteminprefs p2 si item 1 如果没有共同评价的电影 返回0iflen si 0 return0 将两人的偏好相加sum1 sum prefs p1 it foritinsi sum2 sum prefs p2 it foritinsi 34 皮尔逊相关度 计算平方和sum1Sq sum pow prefs p1 it 2 foritinsi sum2Sq sum pow prefs p2 it 2 foritinsi 计算对应项的乘积和pSum sum prefs p1 it prefs p2 it foritinsi 计算皮尔逊相关度num pSum sum1 sum2 n den sqrt sum1Sq pow sum1 2 n sum2Sq pow sum2 2 n ifden 0 return0r num denreturnr 35 皮尔逊相关度 在交互式控制台中使用上述两种计算方法 reload recommendations recommendations sim distance recommendations critics LisaRose GeneSeymour 0 148148148148 recommendations sim pearson recommendations critics LisaRose GeneSeymour 0 396059017191 36 给评论者打分 有了对两个人进行比较的函数 下面就可以找出与某人品味最接近的人了 进而 可以根据这些人的喜好来推荐电影 deftopMatches prefs person n 5 similarity sim pearson scores similarity prefs person other other forotherinprefsifother person 对list排序 相似度最高的人排在最前scores sort scores reverse returnscores 0 n 在交互控制台中使用该函数 recommendations topMatches recommendations critics Toby n 3 0 99124070716192991 LisaRose 0 92447345164190486 MickLaSalle 0 89340514744156474 ClaudiaPuig 37 推荐电影 我们固然可以选择只看那些和我们品味相近的人推荐的电影 但这样做太武断 也许某部电影大家普遍都觉得不错 而恰好与我们最相近的那个人没有看过 所以 我们需要一种对推荐人进行加权的推荐 如下表 给Toby的电影推荐表 38 推荐电影 S X打头的列是经过加权的电影评分 下面的代码给出了上述过程的具体实现 defgetRecommendations prefs person similarity sim pearson totals simSums forotherinprefs 不和自己比ifother person continuesim similarity prefs person other 忽略小于等于0的评分ifsim 0 continueforiteminprefs other 39 推荐电影 只计算我没看过的电影ifitemnotinprefs person orprefs person item 0 相似度乘以得分totals setdefault item 0 totals item prefs other item sim 相似度求和simSums setdefault item 0 simSums item sim 对结果进行归一化rankings total simSums item item foritem totalintotals items 排序并返回结果rankings sort rankings reverse returnrankings 40 推荐电影 然后就可以看结果了 reload 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推荐了三部电影 而且用两种相似度地算方法得到的列表是一样的 41 总结 到此为止 我们建立了一个完整的推荐系统 它适用于任何的商品推荐以及基于相似度的数据关系挖掘 而这一切在Python中 仅仅是建立一个涉及人 商品以及评价值的字典 然后根据某些相似度算法得出的人与人的相似度 就可以进行推荐了 42 家族旅行问题的最优化算法 问题描述 Glass一家住在美国不同的地方 他们希望在纽约相聚 在同一天从各地坐飞机到纽约 几天后再一起离开 每天有许多往返的航班 起飞时间 价格以及飞行时间都不相同 现在需要找到一种好的日程安排 使得大家的旅行花费尽可能少 等待亲友的时间尽可能短 乘坐飞机的时间尽可能短 建立文件optimization py 加入如下代码 people Seymour BOS Franny DAL Zooey CAK Walt MIA Buddy ORD Les OMA 目的地 纽约LaGuardia机场destination LGA 43 问题分析 首先要找到一种通用的表示日程安排方案的方法 然后 为了描述某种方案的好坏 需要定义某种函数 在优化问题中 这个函数叫做代价函数 costfunciton 一个方案越好 它的代价函数值越小 这样找最优方案的问题转化为找代价函数值最小的方案的问题 最后设法找出具有最小代价函数值的方案 完成优化过程 44 导入数据 从网址origin dest depart arrive price line strip split flights setdefault origin dest 将航班详情加入到航班字典的值中flights origin dest append depart arrive int price 45 描述方案 如何描述各种方案呢 一个通用的方法是使用数字列表 它使得之后描述的优化算法并不依赖于具体的问题 本例中 用数字表示某人乘坐当天的第几趟航班 0代表第一趟 1代表第二趟 以此类推 由于每个人都要选择往和返两趟班机 所以列表的总长是人数的两倍 例如 1 4 3 2 7 3 6 3 2 4 5 3 该方案表示Seymour坐第2趟航班去纽约 坐第5趟航班回波士顿Franny坐第4趟航班去纽约 坐第3趟回达拉斯 46 代价函数 代价函数的选取是优化算法的重要环节 本例中 可以综合考虑如下因素来构造代价函数 价格 所有航班的总票价旅行时间 所有人在飞机上度过的总时间等待时间 在机场等待其他成员到达的总时间出发时间 早晨太早起飞的航班有额外的代价 因为旅行者睡眠不足汽车租用时间 如果集体租车 那么他们最好在某个时间前将车归还 否则会多付租金 47 代价函数 限于篇幅 就不给出代价函数的全部代码了 使用方法如下 reload optimization optimization schedulecost s 5285有了代价函数 下面就是找到具有最小函数值的方案了 在这个例子中有16个航班 每个航班都有9种可能 所有的可能数为916 约3000亿 所以穷举是不现实的 下面使用两种方法实现优化 随机优化爬山法 48 随机优化 随机生成一些方案 找出其中最好的方案 defrandomoptimize domain costf best 999999999bestr Noneforiinrange 1000 随机生成一个方案r random randint domain i 0 domain i 1 foriinrange len domain 计算代价cost costf r 与当前最优方案的代价比较ifcost best best costbestr rreturnr 49 爬山法 随机优化的不足在于 没有充分利用已有的优解 爬山法则以一个随机解开始 然后在邻近的解集中寻找更好的解 这类似于从斜坡上往下走 如图 下面的代码片段描述了如何获取已有解的邻近解 neighbors forjinrange len domain 两个方向ifsol j domain j 0 neighbors append sol 0 j sol j 1 sol j 1 ifsol j domain j 1 neighbors append sol 0 j sol j 1 sol j 1 50 爬山法 爬山法虽然利用了已经找到的优解 但它很容易陷入所谓的局部最优解 而找不到全局最优解 一种改进是随机重复爬山法 即从多个随机点开始运行爬山法若干次 以此希望有一个解能逼近全局最小 此外 模拟退火算法和遗传算法也能避免陷入局部最小值 51 查看结果 在交互控制台中输入如下代码 查看优化结果 reload optimization domain 0 8 len optimization people 2 s optimization randomoptimize domain optimization schedulecost optimization schedulecost s 3328 optimization 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 52 查看结果 s optimization hillclimb domain optimization schedulecost optimization schedulecost s 3063 optimization 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 53 总结 在本例中 首先使用Python的列表对不同的方案进行了数学建模 然后根据一些指标建立了代价函数 最后使用两种方法实现了优化过程 在整个过程中 Python的简单易用让我们能够集中精力解决实际的问题 而无需过多关注编程本身 此外 Python的交互控制台使得编程与调试过程变得自然顺畅 54 大纲 起源特性用途不足如何学习 APeraGlobalCompany 2009PERAChina 55 硬币的另一面 限制Python发展的因素缺乏预包装的解决方案数据库访问层的局限性文档差距缺乏GUI和团队协作工具 56 限制Python发展的因素 缺乏预包装的解决方案PHP在企业软件领域赢得了辉煌的成功 主要原因就在于其广泛实用的产品门类 比如讨论板 聊天服务器和分组日历以及即时消息系统等 相比之下 Python提供的解决方案就少多了 Python语言的分发版中确实包含了一些扩展的类库 越来越多的程序员也在致力于开发等价PHP的Python工具 但是考虑到市场的时间紧迫性 而且你所面临的问题已经有现成的PHP解决方案可以对付 那么PHP自然会成为你的首选 57 限制Python发展的因素 数据库访问层的局限性相比现有的成熟技术 比如ODBC和JDBC Python的数据库访问层看
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民爆物品安全培训系统课件
- 初级电焊考试题库及答案
- 宝玉石基础考试题及答案
- 中式婚礼设计理念策划方案
- 民族舞蹈课件封面设计
- 新质生产力与海洋经济的联系
- 企业网络安全方案活动
- 民族理论常识说课课件
- 民族教育多彩的服饰课件
- 2025年口腔科常见口腔疾病处理技巧模拟考试卷答案及解析
- 染织工艺知识培训课件
- 全屋定制家具安装规范
- 教师在线教学能力提升学习总结
- 交通安全培训(摩托车电动车)
- 医院培训课件:《胰岛素规范化注射》
- 木材加工质量控制与验收考核试卷
- 《布病防控知识》课件
- 低空经济产业标准体系规划研究
- 保育员应掌握的工作技能(完整版)
- 贵州省遵义市(2024年-2025年小学六年级语文)部编版小升初模拟((上下)学期)试卷及答案
- 路灯安装工程项目实施的重点、难点和解决方案
评论
0/150
提交评论