已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Python程序開發(fā),信息管理部王輝,Python背景介紹,課程導航,起源,作者:GuidoVanRossum(GvR)/guido/名字的讀法“仁慈的終身獨裁者”BenevolentDictatorForLife他持續(xù)關注Python的開發(fā)進程,指導支持Python開源社區(qū)的活動,并在必要的時刻做出決定。目前在Google工作,得名,“1989年12月,我在尋找一門“課余”編程項目來打發(fā)圣誕節(jié)前后的時間。我的辦公室會關門,但我有一臺家用電腦,而且沒有太多其它東西。我決定為當時我正構思的一個新的腳本語言寫一個解釋器,它是ABC語言的后代,對UNIX/C程序員會有吸引力。作為一個略微有些無關想法的人,和一個蒙提派森(MontyPython)的飛行馬戲團的狂熱愛好者,我選擇了Python作為項目的標題?!?每個人都會,ComputerProgrammingforEverybody1999年,Guido向DARPA闡述Python語言的特性:簡單、直觀、強大開源,以便任何人都可以為它做貢獻代碼像純英語那樣容易理解適用于短期開發(fā)的日常任務這些想法中的一些已經成為現實。Python已經成為一門流行的編程語言,尤其是在互聯網環(huán)境下。,Python啟示錄,Python崇尚優(yōu)美、清晰、簡單,是一個優(yōu)秀并廣泛使用的語言。TIOBE語言排行第八,Google的第三大開發(fā)語言,Dropbox的基礎語言,豆瓣的服務器語言。,Python背景介紹,課程導航,特性,交互式命令行(Interactiveconsole)不只是腳本強大易用的標準庫膠水語言(gluelanguage)收放自如(scalability)不要括號vsPerlvsRuby,交互式命令行(Interactiveconsole),Python可以單步直譯運行。運行Python解釋器進入交互式命令行的環(huán)境,你可以在提示符號旁輸入代碼,按Enter鍵輸出結果:print(Hello,Python!)Hello,Python!有點像Shell腳本的執(zhí)行方式。,不只是腳本,原因是“腳本語言”泛指僅作簡單編程任務的語言,如Linuxshellscript、JavaScript等,它們只能處理簡單的任務而Python是面向對象編程(OOP)的,支持異常處理和類型檢查Python的支持者較喜歡稱它為一種高階動態(tài)編程語言,強大易用的標準庫,核心庫不超過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)以及對多線程分布式操作的支持,使得程序可以用相同的代碼處理不同規(guī)模的數據,以及并發(fā)的用戶需求。GoogleAppEngine,不要括號,Python使用縮進而不是括號來進行代碼段標識,減少了視覺上的混亂,并且使程序變短,從而提高了程序的可讀性。,vs.Perl,Perl是另一種廣泛使用(濫用)的動態(tài)高級語言,經常被用來與Python比較。正則表達式的典范催生了CGI、PHP黑客最喜愛的語言LarryWallPerl語言之父,語言學家/larry/兩屆國際C語言混亂代碼大賽(IOCCC)的冠軍第一屆自由軟件獎得主,程序員的三大美德,懶惰:能讓人盡量減少總能量支出的美德。它使你寫出節(jié)省腦力、可以重用的代碼;也督促你為程序寫注釋和文檔,那樣你就不用回答各種問題。所以它是程序員的第一大美德。所以有了這本書。參見下兩條。不耐煩:當電腦想偷懶時你爆發(fā)的怒氣.它使你寫的代碼能主動預測、而非被動滿足用戶需求,至少裝作是這樣。所以它是程序員的第二大美德。參見懶惰和傲慢。傲慢:自傲到人神共憤的程度,也是一種品質,能使你編寫(維護)的程序讓人無可指摘。所以它是程序員的第三大美德.參見前兩條。,觀點,Perl之父LarryWall:“做一件事有很多種方法”Python資深開發(fā)者TimPeters:“做一件事,應該有一種最直觀的方法,而且最好只有一種?!盤ython之父GuidoVanRossum:“做一件事情只有一種方法”,vs.Ruby,Ruby:比Python更年輕的動態(tài)語言完全面向對象支持正則表達式整合了多種語言的優(yōu)勢RubyonRails網站快速開發(fā)工具松本行弘(“Matz”)“不要重復自己”,國籍,用途,腳本程序大型程序的原型開發(fā)科學計算網絡應用計算機圖形編程,知名的Python應用,Zope:一個應用程序服務器,具有內容管理、團隊開發(fā)、XML、面向對象、SOAP接口等一系先進特性,開源。Gadfly:一個用Python寫的面向對象關系型數據庫,具有小巧、快速、可移植性好的特點,具有大部分SQL語言特性。開源。Wallbase:Python編寫的圖片站點。uTorrent:BitTorrent下載軟件,主程序僅2Mb,支持ipv6地址解析。開源。Torchlight:Python編寫的大型3D游戲,原Blizzard公司人員制作發(fā)行,開源。,GoogleAppsEngine,“GoogleAppEngine可讓您在Google的基礎架構上運行您的網絡應用程序。AppEngine應用程序易于構建和維護,并可根據您的訪問量和數據存儲需要的增長輕松擴展。使用GoogleAppEngine,將不再需要維護服務器:您只需上傳您的應用程序,它便可立即為您的用戶提供服務?!盤ython為GAE的數據存儲區(qū)、Google帳戶、網址抓取和電子郵件服務提供了豐富的PythonAPI。GAE還提供了一個稱為webapp的簡單Python網絡應用程序框架,從而可以輕松開始構建應用程序。,GAE的主要服務,動態(tài)網絡服務,提供對常用網絡技術的完全支持持久存儲空間,支持查詢、分類和事務自動擴展和負載平衡用戶身份驗證和使用Google帳戶發(fā)送電子郵件的API一套在本地模擬GAE的開發(fā)環(huán)境用于在指定時間和定期觸發(fā)事件的計劃任務,Python背景介紹,課程導航,HelloWorld例子,在hello.py中寫入如下,并保存:print(HelloWorld!)退出文本編輯器,然后在命令行輸入:pythonhello.py可以看到Python隨后輸出:HelloWorld!,基本數據類型,a=10#int整數a=1.3#float浮點數a=True#真值(True/False)a=Hello!#字符串。字符串也可以用雙引號。,for循環(huán),for元素in序列:statement例子:forain3,4.4,life:printa,while循環(huán),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章)家族旅行問題的最優(yōu)化算法(第5章),根據品味相似度進行電影推薦,基本思路:從一大群人中找出與我們品味相近的一小群人,對這些人所喜愛的其他內容進行考查,并把它們組合起來創(chuàng)建一個經過排名的推薦列表。(協作過濾CollaborativeFiltering)步驟:1.搜集偏好2.尋找相似的用戶3.推薦電影,搜集偏好,首先找到一種表示不同人及其偏好的電影的方法??梢允褂萌藢撞侩娪暗脑u分來刻畫他們的偏好,評分從1到5,分數越高,表示某人對該電影越喜歡。如何建立這種從人到電影的對應關系?Python中有一個很簡單的方法來表示這種數據結構:使用嵌套的字典。,搜集偏好,創(chuàng)建名為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)結果顯示,人們?yōu)門oby推薦了三部電影,而且用兩種相似度地算方法得到的列表是一樣的。,總結,到此為止,我們建立了一個完整的推薦系統(tǒng),它適用于任何的商品推薦以及基于相似度的數據關系挖掘。而這一切在Python中,僅僅是建立一個涉及人、商品以及評價值的字典,然后根據某些相似度算法得出的人與人的相似度,就可以進行推薦了。,Python背景介紹,課程導航,家族旅行問題的最優(yōu)化算法,問題描述:Glass一家住在美國不同的地方。他們希望在紐約相聚,在同一天從各地坐飛機到紐約,幾天后再一起離開。每天有許多往返的航班,起飛時間、價格以及飛行時間都不相同?,F在需要找到一種好的日程安排,使得大家的旅行花費盡可能少、等待親友的時間盡可能短、乘坐飛機的時間盡可能短。建立文件optimization.py,加入如下代碼:people=(Seymour,BOS),(Franny,DAL),(Zooey,CAK),(Walt,MIA),(Buddy,ORD),(Les,OMA)#目的地:紐約LaGuardia機場destination=LGA,問題分析,首先要找到一種通用的表示日程安排方案的方法。然后,為了描述某種方案的好壞,需要定義某種函數。在優(yōu)化問題中,這個函數叫做代價函數(costfunciton)。一個方案越好,它的代價函數值越小。這樣找最優(yōu)方案的問題轉化為找代價函數值最小的方案的問題。最后設法找出具有最小代價函數值的方案,完成優(yōu)化過程。,導入數據,從網址origin,dest,depart,arrive,price=line.strip().split(,)flights.setdefault(origin,dest),)#將航班詳情加入到航班字典的值中flights(origin,dest).append(depart,arrive,int(price),描述方案,如何描述各種方案呢?一個通用的方法是使用數字列表,它使得之后描述的優(yōu)化算法并不依賴于具體的問題。本例中,用數字表示某人乘坐當天的第幾趟航班,0代表第一趟,1代表第二趟,以此類推。由于每個人都要選擇往和返兩趟班機,所以列表的總長是人數的兩倍。例如:1,4,3,2,7,3,6,3,2,4,5,3該方案表示Seymour坐第2趟航班去紐約,坐第5趟航班回波士頓Franny坐第4趟航班去紐約,坐第3趟回達拉斯。,代價函數,代價函數的選取是優(yōu)化算法的重要環(huán)節(jié)。本例中,可以綜合考慮如下因素來構造代價函數:價格:所有航班的總票價旅行時間:所有人在飛機上度過的總時間等待時間:在機場等待其他成員到達的總時間出發(fā)時間:早晨太早起飛的航班有額外的代價,因為旅行者睡眠不足汽車租用時間:如果集體租車,那么他們最好在某個時間前將車歸還,否則會多付租金。,代價函數,限于篇幅,就不給出代價函數的全部代碼了,使用方法如下:reload(optimization)optimization.schedulecost(s)5285有了代價函數,下面就是找到具有最小函數值的方案了。在這個例子中有16個航班、每個航班都有9種可能,所有的可能數為916,約3000億,所以窮舉是不現實的。下面使用兩種方法實現優(yōu)化:隨機優(yōu)化爬山法,隨機優(yōu)化,隨機生成一些方案,找出其中最好的方案。defrandomoptimize(domain,costf):best=999999999bestr=Noneforiinrange(1000):#隨機生成一個方案r=random.randint(domaini0,domaini1)foriinrange(len(domain)#計算代價cost=costf(r)#與當前最優(yōu)方案的代價比較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的列表對不同的方案進行了數學建模,然后根據一些指標建立了代價函數,最后使用兩種方法實現了優(yōu)化過程。在整個過程中,Python的簡單易用讓我們能夠集中精力解決實際的問題。而無需過多關注編程本身。此外,Python的交互控制臺使得編程與調試過程變得自然順暢。,硬幣的另一面,限制Python發(fā)展的因素缺乏預包裝的解決方案數據庫訪問層的局限性文檔差距缺乏GUI和團隊協作工具,限制Python發(fā)展的因素,缺乏預包裝的解決方案PHP在企業(yè)軟件領域贏得了輝煌的成功,主要原因就在于其廣泛實用的產品門類,比如討論板、聊天服務器和分組日歷以及即時消息系統(tǒng)等。相比之下,Python提供的解決方案就少多了。Python語言的分發(fā)版中確實包含了一些擴展的類庫,越來越多的程序員也在致力于開發(fā)等價PHP的Python工具,但是考慮到市場的時間緊迫性,而且你所面臨的問題已經有現成的PHP解決方案可以對付,那么PHP自然會成為你的首選。,限制Python發(fā)展的因素,數據庫訪問層的局限性相比現有的成熟技術,比如ODBC和JDBC,Python的數據庫訪問層看起來就過于原始了。雖然這一方面也在發(fā)生變化,但是,開發(fā)部門需要平滑地接合現有的復雜遺留數據,同時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 災害信息員培訓制度
- 2026年電力工程專業(yè)知識考核試題虛擬電廠的關鍵技術與問題探討
- 2026年心理學研究方法與實踐試題庫含心理評估技術
- 2026年建筑工程考試題集建筑結構與施工工藝
- 消防安全教育和培訓制度
- 派出所節(jié)假日值班制度
- 村干部工作紀律制度
- 有限空間作業(yè)的相關安全制度
- 明確生態(tài)產品產權界定、價值評估、市場交易等基本制度
- 汽車維修企業(yè)管理與培訓手冊
- 健康活動:長高了變壯了
- JG/T 100-1999塔式起重機操作使用規(guī)程
- T/TMAC 031.F-2020企業(yè)研發(fā)管理體系要求
- 簡易運輸合同協議書模板
- 高考英語必背600短語總結
- 防滲漏體系策劃培訓(中建)
- 鍋爐教材模塊一鍋爐認知
- GB/T 34765-2024肥料和土壤調理劑黃腐酸含量及碳系數的測定方法
- 傳染性疾病影像學課件
- 監(jiān)獄服裝加工合同范本
- HG20202-2014 脫脂工程施工及驗收規(guī)范
評論
0/150
提交評論