1、Python程序开发,信息管理部 王辉,Python背景介绍,课程导航,起源,作者 :Guido Van Rossum (GvR) http:/www.python.org/guido/ 名字的读法“仁慈的终身独裁者” Benevolent Dictator For Life他持续关注 Python 的开发进程,指导支持Python开源社区的活动,并在必要的时刻做出决定。目前在 Google 工作,得名,“1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间。我的办公室会关门,但我有一台家用电脑,而且没有太多其它东西。我决定为当时我正构思的一个新的脚本语言写一个解释器,它是 A
2、BC 语言的后代,对 UNIX / C 程序员会有吸引力。作为一个略微有些无关想法的人,和一个蒙提派森(Monty Python)的飞行马戏团的狂热爱好者,我选择了 Python 作为项目的标题。”,每个人都会,Computer Programming for Everybody 1999年,Guido向DARPA 阐述Python语言的特性:简单、直观、强大开源,以便任何人都可以为它做贡献代码像纯英语那样容易理解适用于短期开发的日常任务这些想法中的一些已经成为现实。Python 已经成为一门流行的编程语言,尤其是在互联网环境下。,Python启示录,Python崇尚优美、清晰、简单,是一个优
3、秀并广泛使用的语言 。 TIOBE语言排行第八,Google的第三大开发语言,Dropbox的基础语言,豆瓣的服务器语言。,Python背景介绍,课程导航,特性,交互式命令行(Interactive console) 不只是脚本 强大易用的标准库 胶水语言(glue language) 收放自如(scalability) 不要括号 vs Perl vs Ruby,交互式命令行(Interactive console),Python可以单步直译运行。运行Python解释器进入交互式 命令行的环境,你可以在提示符号旁输入代码,按Enter键 输出结果: print(“Hello, Python!“
4、) Hello, Python!有点像Shell 脚本的执行方式。,不只是脚本,原因是“脚本语言”泛指仅作简单编程任务的语言,如Linux shell script、JavaScript等,它们只能处理简单的任务而Python是面向对象编程(OOP)的,支持异常处理和类型检查Python的支持者较喜欢称它为一种高阶动态编程语言,强大易用的标准库,核心库不超过10Mb Html、Xml解析:BeautifulSoup, Expat 字符串处理:字典、数组切片、正则表达式 re 单元测试: PyUnit 代码版本控制: PySVN 网络访问: urllib2 图形模块: Tkinter、PyTCL
5、、WxPython 串行化、多线程等 扩展标准库十分容易,胶水语言(glue language),Python经常用作将不同语言编写的程序“粘”在一起的胶水语言。 Google内部的很多项目使用C+编写性能要求极高的部分, 然后用Python调用相应的模块。 C/C+: Boost.Python使得 Python 和 C+ 的类库能互相调用(.pyc) Java: Jython 是用Java实现的Python,可同时使用二者的类库 .NET:IronPython是Python在.NET平台上的版本。,收放自如(scalability),Python内建的数据结构(variable, list
6、和 dict)以及对多线程 分布式操作的支持,使得程序可以用相同的代码处理不同规模 的数据,以及并发的用户需求。Google App Engine http:/ Perl,Perl是另一种广泛使用(滥用)的动态高级语言, 经常被用来与Python 比较。正则表达式的典范催生了CGI、PHP黑客最喜爱的语言 Larry Wall Perl语言之父,语言学家 www.wall.org/larry/ 两届国际C语言混乱代码大赛(IOCCC) 的冠军 第一届自由软件奖得主,程序员的三大美德,懒惰:能让人尽量减少总能量支出的美德。它使你写出节省脑力、可以重用的代码;也督促你为程序写注释和文档,那样你就不
7、用回答各种问题。所以它是程序员的第一大美德。所以有了这本书。参见下两条。不耐烦:当电脑想偷懒时你爆发的怒气. 它使你写的代码能主动预测、而非被动满足用户需求,至少装作是这样。所以它是程序员的第二大美德。 参见懒惰和傲慢。傲慢:自傲到人神共愤的程度,也是一种品质,能使你编写(维护)的程序让人无可指摘。所以它是程序员的第三大美德. 参见前两条。,观点,Perl之父Larry Wall:“做一件事有很多种方法”Python资深开发者Tim Peters:“做一件事,应该有一种最直观的方法,而且最好只有一种。”Python之父Guido Van Rossum:“做一件事情只有一种方法”,vs. Rub
8、y,Ruby:比Python更年轻的动态语言 完全面向对象 支持正则表达式 整合了多种语言的优势 Ruby on Rails 网站快速开发工具 松本行弘 (“Matz”) “不要重复自己”,国籍,用途,脚本程序 大型程序的原型开发 科学计算 网络应用 计算机图形编程,知名的Python应用,Zope:一个应用程序服务器,具有内容管理、团队开发、XML、面向对象、SOAP接口等一系先进特性,开源。 Gadfly:http:/ Wallbase: http:/Python编写的图片站点。 uTorrent : http:/BitTorrent下载软件,主程序仅2Mb,支持ipv6地址解析。开源。
9、Torchlight: Python编写的大型3D游戏,原Blizzard公司人员制作发行,开源。,Google Apps Engine,“Google App Engine 可让您在 Google 的基础架构上运行您的网络应用程序。App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展。 使用 Google App Engine, 将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务。”Python 为GAE的数据存储区、Google 帐户、网址抓取和电子邮件服务提供了丰富的 Python API。GAE还提供了一个称为 webap
10、p 的简单 Python 网络应用程序框架,从而可以轻松开始构建应用程序。,GAE的主要服务,动态网络服务,提供对常用网络技术的完全支持持久存储空间,支持查询、分类和事务自动扩展和负载平衡用户身份验证和使用 Google 帐户发送电子邮件的 API一套在本地模拟 GAE的开发环境用于在指定时间和定期触发事件的计划任务,Python背景介绍,课程导航,Hello World例子,在hello.py中写入如下,并保存: print(Hello World!)退出文本编辑器,然后在命令行输入: python hello.py可以看到Python随后输出: Hello World!,基本数据类型,a=
11、10 # int 整数 a=1.3 # float 浮点数 a=True # 真值 (True/False) a=Hello! # 字符串。字符串也可以用双引号。,for循环,for 元素 in 序列: statement例子: for a in 3,4.4,life: print a,while循环,while 条件:statement举例: while i 10: print i i = i + 1,sequence 序列,sequence(序列)是一组有顺序的元素的集合。 序列可以包含一个或多个元素,也可以没有任何元素。序列有两种: tuple(美tpl定值表; 也有翻译为元组) 和 l
12、ist (表)。 tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更。 s1 = (2, 1.3, love, 5.6, 9, 12, False) # s1是一个tuple s2 = True, 5, smile # s2是一个list序列元素的下标从0开始 print(s21),正则表达式,正则表达式(regular expression)主要功能是从字符串(string)中通过特定的模式(pattern),搜索想要找到的内容。在Python中使用正则表达式需要标准库中的一个包re。 import re m = re.search(
13、0-9,abcd4ef) print(m.group(0),正则表达式,m = re.search(pattern, string) # 搜索整个字符串,直到发现符合的子字符串。m = re.match(pattern, string) # 从头开始检查字符串是否符合正则表达式。必须从字符串的第一个字符开始就相符。,正则表达式,str = re.sub(pattern, replacement, string) # 在string中利用正则变换pattern进行搜索,对于搜索到的字符串,用另一字符串replacement替换。返回替换后的字符串。,正则表达式,re.split() # 根据正则
14、表达式分割字符串, 将分割后的所有子字符串放在一个表(list)中返回re.findall() # 根据正则表达式搜索字符串,将所有符合的子字符串放在一给表(list)中返回,正则表达式,正则表达式的常用语法: 1)单个字符: . 任意的一个字符 a|b 字符a或字符b afg a或者f或者g的一个字符 0-4 0-4范围内的一个字符 a-f a-f范围内的一个字符 m 不是m的一个字符 s 一个空格 S 一个非空格 d 0-9 D 0-9 w 0-9a-zA-Z W 0-9a-zA-Z,正则表达式,d 2)重复 紧跟在单个字符之后,表示多个这样类似的字符 * 重复 =0 次 + 重复 =1
15、次 ? 重复 0或者1 次 m 重复m次。比如说 a4相当于aaaa,再比如说1-32相当于1-31-3 m, n 重复m到n次。比如说a2, 5表示a重复2到5次。小于m次的重复,或者大于n次的重复都不符合条件。,正则表达式,正则表达 相符的字符串举例 0-93,5 9678 a?b b a+b aaaaab,正则表达式,正则表达式的常用语法: 1)单个字符: . 任意的一个字符 a|b 字符a或字符b afg a或者f或者g的一个字符 0-4 0-4范围内的一个字符 a-f a-f范围内的一个字符 m 不是m的一个字符 s 一个空格 S 一个非空格 d 0-9 D 0-9 w 0-9a-z
16、A-Z W 0-9a-zA-Z,2)重复 紧跟在单个字符之后,表示多个这样类似的字符 * 重复 =0 次 + 重复 =1 次 ? 重复 0或者1 次 m 重复m次。比如说 a4相当于aaaa,再比如说1-32相当于1-31-3 m, n 重复m到n次。比如说a2, 5表示a重复2到5次。小于m次的重复,或者大于n次的重复都不符合条件。,正则表达 相符的字符串举例 0-93,5 9678 a?b b a+b aaaaab,两个例子,“集体智慧编程” 根据品味相似度进行电影推荐 (第2章)家族旅行问题的最优化算法 (第5章),根据品味相似度进行电影推荐,基本思路:从一大群人中找出与我们品味相近的一
17、小群人,对这些人所喜爱的其他内容进行考查,并把它们组合起来创建一个经过排名的推荐列表。(协作过滤 Collaborative Filtering)步骤:1.搜集偏好2.寻找相似的用户3.推荐电影,搜集偏好,首先找到一种表示不同人及其偏好的电影的方法。可以使用人对几部电影的评分来刻画他们的偏好,评分从1到5, 分数越高,表示某人对该电影越喜欢。如何建立这种从人到电影的对应关系? Python中有一个很简单的方法来表示这种数据结构: 使用嵌套的字典。,搜集偏好,创建名为recommandations.py 的数据文件: critics= Lisa Rose: Lady in the Water:
18、2.5, Snakes on a Plane: 3.5, Just My Luck: 3.0, Superman Returns: 3.5, You, Me and Dupree: 2.5, The Night Listener: 3.0,Gene Seymour: Lady in the Water: 3.0, Snakes on a Plane: 3.5, Just My Luck: 1.5, Superman Returns: 5.0, The Night Listener: 3.0, You, Me and Dupree: 3.5Toby: Snakes on a Plane:4.5,
19、You, Me and Dupree:1.0,Superman Returns:4.0 ,搜集偏好,我们可以使用交互控制台对字典的数据进行查询和修改: from recommendations import critics criticsLisa RoseLady in the Water 2.5 criticsTobySnakes on a Plane=4.5 criticsToby Snakes on a Plane:4.5,You, Me and Dupree:1.0,寻找相似的用户,收集了人们的偏好数据后,我们需要方法来计算某两个人电影品味的相似度。 有两种基本的方法可以实现这个目的:
20、欧几里得距离皮尔逊相关度,欧几里得距离评价,以二维空间中的情形为例:设坐标轴 为人们都评价过的两部电影,然后将 参与评价的人根据他们对这两部电影 的评分绘制到图上,并考察他们彼此 间的距离,如图:图中的点距离越近,表明两个人的偏好越接近。推广到多维 向量空间,欧几里得法可表示为:计算每一轴上两点的差值求 平方,再将各轴相加,最后取平方根。,欧几里得距离评价,如计算Toby和LaSalle的距离: from math import sqrt sqrt(pow(5-4,2)+pow(4-1,2) 3.1622776601683795为了给偏好接近的情况给出较大的值,可取 该值的倒数,并+1避免除数
21、为0: 1/(1+sqrt(pow(5-4,2)+pow(4-1,2) 0.2402530733520421,欧几里得距离评价,使用这种方法 构造出如下相似度函数: def sim_distance(prefs,person1,person2): # 得到共同的电影 si= for item in prefsperson1: if item in prefsperson2: siitem=1 # 如果没有共同的电影则返回0 if len(si)=0: return 0 #计算欧几里得距离,返回相似度 Sum_of_squares=sum(pow(prefsperson1item-prefspe
22、rson2item,2) for item in prefsperson1 if item in prefsperson2) return 1/(1+sum_of_squares),皮尔逊相关度,皮尔逊相关系数是一种更复杂的方法,它通过计算两组数据 与某一直线拟合的程度来判断它们的相似程度。 该方法有助于克服所谓的“夸大评价”现象对结果的影响。右图中,虽然Jack对电影的评价 比Lisa更为极端(更容易给出高分 和低分),但这个坐标系中的点都 相当靠近拟合曲线(图中虚线),可 以说两人的品味较为相近。,皮尔逊相关度,使用如下函数计算皮尔逊相关度,该函数返回一个-1到1的值: def sim_p
23、earson(prefs,p1,p2): # 得到共同评价的电影 si= for item in prefsp1: if item in prefsp2: siitem=1 # 如果没有共同评价的电影,返回0 if len(si)=0: return 0 # 将两人的偏好相加 sum1=sum(prefsp1it for it in si) sum2=sum(prefsp2it for it in si),皮尔逊相关度,# 计算平方和 sum1Sq=sum(pow(prefsp1it,2) for it in si) sum2Sq=sum(pow(prefsp2it,2) for it in
24、si) # 计算对应项的乘积和 pSum=sum(prefsp1it*prefsp2it for it in si) # 计算皮尔逊相关度 num=pSum-(sum1*sum2/n) den=sqrt(sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n) if den=0: return 0 r=num/den return r,皮尔逊相关度,在交互式控制台中使用上述两种计算方法: reload(recommendations) recommendations.sim_distance(recommendations.critics, . Lisa Ros
25、e,Gene Seymour) 0.148148148148 recommendations.sim_pearson(recommendations.critics, . Lisa Rose,Gene Seymour) 0.396059017191,给评论者打分,有了对两个人进行比较的函数,下面就可以找出与某人品味 最接近的人了,进而,可以根据这些人的喜好来推荐电影。 def topMatches(prefs,person,n=5,similarity=sim_pearson):scores=(similarity(prefs,person,other),other)for other in
26、prefs if other!=person# 对list排序,相似度最高的人排在最前scores.sort( )scores.reverse( )return scores0:n 在交互控制台中使用该函数: recommendations.topMatches(recommendations.critics,Toby,n=3) (0.99124070716192991, Lisa Rose), (0.92447345164190486, Mick LaSalle), (0.89340514744156474, Claudia Puig),推荐电影,我们固然可以选择只看那些和我们品味相近的人推
27、荐的电影,但这样做太武断,也许某部电影大家普遍都觉得不错,而恰好与我们最相近的那个人没有看过。 所以,我们需要一种对推荐人进行加权的推荐,如下表: 给Toby的电影推荐表,推荐电影,S.X打头的列是经过加权的电影评分。 下面的代码给出了上述过程的具体实现: def getRecommendations(prefs,person,similarity=sim_pearson):totals=simSums=for other in prefs:# 不和自己比if other=person: continuesim=similarity(prefs,person,other)# 忽略小于等于0的评
28、分if sim=0: continuefor item in prefsother:,推荐电影,# 只计算我没看过的电影if item not in prefsperson or prefspersonitem=0:# 相似度乘以得分totals.setdefault(item,0)totalsitem+=prefsotheritem*sim# 相似度求和simSums.setdefault(item,0)simSumsitem+=sim# 对结果进行归一化rankings=(total/simSumsitem,item) for item,total in totals.items( )#
29、排序并返回结果rankings.sort( )rankings.reverse( )return rankings,推荐电影,然后就可以看结果了: reload(recommendations) recommendations.getRecommendations(recommendations.critics,Toby) (3.3477895267131013, The Night Listener), (2.8325499182641614, Lady in the Water), (2.5309807037655645, Just My Luck) recommendations.get
30、Recommendations(recommendations.critics,Toby, . similarity=recommendations.sim_distance) (3.5002478401415877, The Night Listener), (2.7561242939959363, Lady in the Water), (2.4619884860743739, Just My Luck)结果显示,人们为Toby推荐了三部电影,而且用两种相似 度地算方法得到的列表是一样的 。,总结,到此为止,我们建立了一个完整的推荐系统,它适用于任何的 商品推荐以及基于相似度的数据关系挖掘
31、。而这一切在Python中,仅仅是建立一个涉及人、商品以及评价 值的字典,然后根据某些相似度算法得出的人与人的相似度, 就可以进行推荐了。,Python背景介绍,课程导航,家族旅行问题的最优化算法,问题描述:Glass一家住在美国不同的地方。他们希望在纽约相聚,在同一天从各地坐飞机到纽约,几天后再一起离开。每天有许多往返的航班,起飞时间、价格以及飞行时间都不相同。现在需要找到一种好的日程安排,使得大家的旅行花费尽可能少、等待亲友的时间尽可能短、乘坐飞机的时间尽可能短。 建立文件optimization.py,加入如下代码: people = (Seymour,BOS),(Franny,DAL)
32、,(Zooey,CAK),(Walt,MIA), (Buddy,ORD),(Les,OMA) #目的地:纽约LaGuardia机场 destination=LGA,问题分析,首先要找到一种通用的表示日程安排方案的方法。然后,为了描述某种方案的好坏,需要定义某种函数。在优化 问题中,这个函数叫做代价函数(cost funciton)。一个方案越 好,它的代价函数值越小。这样找最优方案的问题转化为找代 价函数值最小的方案的问题。最后设法找出具有最小代价函数值的方案,完成优化过程。,导入数据,从网址http:/ 可以下载到航班数据,格式如下: LGA,MIA,20:27,23:42,169 MIA,
33、LGA,19:53,22:21,173 LGA,BOS,6:39,8:09,86 分别是起点、终点、起飞时间、到达时间和机票价格。 将数据载入到以起止点为键、以航班详情为值的字典中: flights= for line in file(schedule.txt):origin,dest,depart,arrive,price=line.strip( ).split(,)flights.setdefault(origin,dest),)# 将航班详情加入到航班字典的值中flights(origin,dest).append(depart,arrive,int(price),描述方案,如何描述各种
34、方案呢?一个通用的方法是使用数字列表, 它使得之后描述的优化算法并不依赖于具体的问题。 本例中,用数字表示某人乘坐当天的第几趟航班,0代表 第一趟,1代表第二趟,以此类推。 由于每个人都要选择往和返两趟班机,所以列表的总长是 人数的两倍。 例如:1,4,3,2,7,3,6,3,2,4,5,3 该方案表示Seymour坐第2趟航班去纽约,坐第5趟航班回波士顿 Franny坐第4趟航班去纽约,坐第3趟回达拉斯。,代价函数,代价函数的选取是优化算法的重要环节。 本例中,可以综合考虑如下因素来构造代价函数: 价格: 所有航班的总票价 旅行时间:所有人在飞机上度过的总时间 等待时间: 在机场等待其他成员
35、到达的总时间 出发时间: 早晨太早起飞的航班有额外的代价,因为旅行者睡眠不足 汽车租用时间: 如果集体租车,那么他们最好在某个时间前将车归还,否则会多付租金。,代价函数,限于篇幅,就不给出代价函数的全部代码了,使用方法如下: reload(optimization) optimization.schedulecost(s) 5285 有了代价函数,下面就是找到具有最小函数值的方案了。 在这个例子中有16个航班、每个航班都有9种可能,所有的 可能数为916,约3000亿,所以穷举是不现实的。 下面使用两种方法实现优化:随机优化爬山法,随机优化,随机生成一些方案,找出其中最好的方案。 def ra
36、ndomoptimize(domain,costf):best=999999999bestr=Nonefor i in range(1000):#随机生成一个方案r=random.randint(domaini0,domaini1)for i in range(len(domain)# 计算代价cost=costf(r)# 与当前最优方案的代价比较if costbest:best=costbestr=rreturn r,爬山法,随机优化的不足在于,没有充分利用已有的优解。 爬山法则以一个随机解开始,然 后在邻近的解集中寻找更好的解, 这类似于从斜坡上往下走,如图。 下面的代码片段描述了如何获取
37、已有解的邻近解: neighbors= for j in range(len(domain):# 两个方向if soljdomainj0:neighbors.append(sol0:j+solj+1+solj+1:)if soljdomainj1:neighbors.append(sol0:j+solj-1+solj+1:),爬山法,爬山法虽然利用了已经找到的 优解,但它很容易陷入所谓的 局部最优解,而找不到全局最 优解。 一种改进是随机重复爬山法, 即从多个随机点开始运行爬山法若干次,以此希望有一个解能 逼近全局最小。 此外,模拟退火算法和遗传算法也能避免陷入局部最小值。,查看结果,在交互控
38、制台中输入如下代码,查看优化结果: reload(optimization) domain=(0,8)*(len(optimization.people)*2) s=optimization.randomoptimize(domain,optimization.schedulecost) optimization.schedulecost(s) 3328 optimization.printschedule(s) Seymour Boston 12:34-15:02 $109 12:08-14:05 $142 Franny Dallas 12:19-15:25 $342 9:49-13:51
39、$229 Zooey Akron 9:15-12:14 $247 15:50-18:45 $243 Walt Miami 15:34-18:11 $326 14:08-16:09 $232 Buddy Chicago 14:22-16:32 $126 15:04-17:23 $189 Les Omaha 15:03-16:42 $135 6:19- 8:13 $239,查看结果, s=optimization.hillclimb(domain,optimization.schedulecost) optimization.schedulecost(s) 3063 optimization.pr
40、intschedule(s) Seymour BOS 12:34-15:02 $109 10:33-12:03 $ 74 Franny DAL 10:30-14:57 $290 10:51-14:16 $256 Zooey CAK 10:53-13:36 $189 10:32-13:16 $139 Walt MIA 11:28-14:40 $248 12:37-15:05 $170 Buddy ORD 12:44-14:17 $134 10:33-13:11 $132 Les OMA 11:08-13:07 $175 18:25-20:34 $205,总结,在本例中,首先使用Python的列表
41、对不同的方案进行了数学 建模,然后根据一些指标建立了代价函数,最后使用两种方法 实现了优化过程。 在整个过程中,Python的简单易用让我们能够集中精力解决 实际的问题。而无需过多关注编程本身。 此外,Python的交互控制台使得编程与调试过程变得自然顺畅。,硬币的另一面,限制Python发展的因素缺乏预包装的解决方案数据库访问层的局限性文档差距缺乏GUI和团队协作工具,限制Python发展的因素,缺乏预包装的解决方案PHP 在企业软件领域赢得了辉煌的成功,主要原因就在于其广泛实用的产品门类,比如讨论板、聊天服务器和分组日历以及即时消息系统等。相比之下,Python提供的解决方案就少多了。Py
42、thon语言的分发版中确实包含了一些扩展的类库,越来越多的程序员也在致力于开发等价PHP的Python工具,但是考虑到市场的时间紧迫性,而且你所面临的问题已经有现成的PHP解决方案可以对付,那么PHP自然会成为你的首选。,限制Python发展的因素,数据库访问层的局限性 相比现有的成熟技术,比如ODBC和JDBC,Python的数据库访问层看起来就过于原始了。虽然这一方面也在发生变化,但是,开发部门需要平滑地接合现有的复杂遗留数据,同时需要快速的SQL数据库访问,所有这一些使其在短时期内难以对Python表现出什么太大的兴趣。,限制Python发展的因素,文档差距 相比其对手语言,比如Perl
43、、Java,在某种程度上再算上PHP,Python确实深受文档缺乏之苦,Python没有广泛、易于获得的文档和图书。市面上冠以PHP标题的图书数量几乎是Python的两倍多;而Perl就更多了,有400多种。 Python的在线文档倒还组织得比较好,但是这些文档几乎全是些参考资料。幸而Python相当容易的学习曲线减轻了对图书资料的过多需要。,限制Python发展的因素,缺乏GUI和团队协作工具 给Python应用程序创建图形用户界面未必复杂。Python分发版本随带的Tk就是Python开发人员最常用的工具。但是Tk缺乏可访问、易用的GUI工具。 相比GUI工具的缺乏更要命的是Python几
44、乎没有支持团队开发的协议工具。 Java在这些工具领域可谓相当丰富。在企业软件开发市场上,这一缺陷简直可视为致命的要害。没有这类工具要让很多程序员共同开发同一项目几乎是不可能的。Python利用其模块化和命名空间分析等特性减轻了这一方面的需求,这些特性可以让多个程序员开发项目时不可能发生代码冲突的情况。但是,这同样改变不了其协同性能缺乏的严重性。,如何学习,“Dont learn. Just use it.”“Hello world”天气预报RSS 歌词搜索引擎,版本,CPython: www.python.org主流:2.5-2.7最新:3.0 不向下兼容 ActivePython:Wind
45、ows 下的Python,文档和库较全 IronPython: http:/ NumPy,Python(x,y):对科学计算进行了优化的Python版本,工具,IDLE:CPython自带 PythonWin:ActivePython自带 Notepad+:查找/替换 tab和空格 语法高亮 Ulipad: 转到函数定义 Code Snippets Eclipse:Java Komodo Editor/IDE Vim/Emacs: Linux下流行的IDE,Pycharm,资料,“集体智慧编程” “简明Python教程” “Python Cookbook” “IronPython In Action” “Google it.”,安装试用,文件位置: 192.168.0.111临时中转x信息管理部SOFTPython271、解压python27.zip到C盘根目录;2、拷贝dll文件到C:WindowsSysWOW643、在环境变量path后面加入c:python,富安娜家居用品股份有限公司,