• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2018年8月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678


            專(zhuān)注即時(shí)通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開(kāi)頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺(jué)尊重!!如為您帶來(lái)不便,請(qǐng)于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類(lèi)

            隨筆檔案

            相冊(cè)

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 216915
            • 排名 - 118

            最新評(píng)論

            閱讀排行榜

            http://www.cnblogs.com/yanxy/archive/2010/02/22/ILovePython.html 

            一、學(xué)習(xí)緣起

            最早聽(tīng)說(shuō)Python是在今年1月底到北京一個(gè)廠商(做汽車(chē)駕駛模擬器的)那里看設(shè)備,聽(tīng)他們的CTO介紹模擬軟件的腳本控制是用的Python,(當(dāng)時(shí)我還把Python叫做“飛森”,而不是“派森” 囧)。第一次聽(tīng)說(shuō)了這個(gè)語(yǔ)言,但也沒(méi)太在意,因?yàn)閷?dǎo)師一直跟我說(shuō)用好一門(mén)語(yǔ)言就夠了。從上大學(xué)到現(xiàn)在,先后用過(guò)C、Basic、C++以及ASP(一看就不是計(jì)算機(jī)專(zhuān)業(yè)的,我大學(xué)認(rèn)識(shí)的幾個(gè)計(jì)算機(jī)專(zhuān)業(yè)的同學(xué),大多都是Pascal - Delphi - Java這條路線)。這幾年主要在用C#,覺(jué)得C#還不錯(cuò),又可以做本地程序,也可以做ASP.NET程序,所以也沒(méi)想再學(xué)其他語(yǔ)言了。

            寒假做了一個(gè)交通網(wǎng)絡(luò)分析的計(jì)算程序,這個(gè)程序前期已經(jīng)有一些基礎(chǔ)了,核心算法用的是QuickGraph庫(kù)。QuickGraph提供了經(jīng)典圖論里邊的絕大部分算法,如最短路、最大流、遍歷、支撐樹(shù)等,不錯(cuò)的一個(gè)東西,但是沒(méi)有復(fù)雜網(wǎng)絡(luò)分析的算法。一開(kāi)始我是利用QuickGraph的數(shù)據(jù)結(jié)構(gòu),然后自己寫(xiě)復(fù)雜網(wǎng)絡(luò)分析算法。但是寫(xiě)的很累,正好也過(guò)年了,就暫時(shí)放下了這個(gè)工作。

            過(guò)年的時(shí)候閑著沒(méi)事,上網(wǎng)找是不是有直接提供復(fù)雜網(wǎng)絡(luò)分析算法的庫(kù),還真找到了兩個(gè):igraph和networkx。(見(jiàn)http://igraph.sourceforge.net/http://networkx.lanl.gov/),其中,igraph是用C寫(xiě)的,但提供了Python的接口;networkx就純粹是用Python實(shí)現(xiàn)的一個(gè)庫(kù)了。下載了它們的文檔,發(fā)現(xiàn)正是我想要的東西:成熟的復(fù)雜網(wǎng)絡(luò)分析算法,大量的示例程序。要想直接利用這兩個(gè)庫(kù),肯定要學(xué)Python語(yǔ)言了。我想,反正各種語(yǔ)言都差不多,學(xué)就學(xué)吧。

            二、語(yǔ)法

            學(xué)語(yǔ)言肯定要先從基本語(yǔ)法學(xué)起。Python的語(yǔ)法的確很簡(jiǎn)單,因?yàn)橛蠧#編程基礎(chǔ),學(xué)習(xí)起來(lái)沒(méi)遇到什么困難。比起C#,Python少了花括號(hào),完全靠縮進(jìn)解決結(jié)構(gòu)問(wèn)題。一開(kāi)始我不太習(xí)慣,特別是寫(xiě)函數(shù)定義、循環(huán)控制等語(yǔ)句時(shí)總丟后邊的冒號(hào)?,F(xiàn)在好多了,習(xí)慣會(huì)慢慢養(yǎng)成(現(xiàn)在變成寫(xiě)C#程序總加冒號(hào),然后調(diào)試器就開(kāi)始不停的問(wèn)候我 囧)。另外Python沒(méi)有switch,因?yàn)槲易隹茖W(xué)計(jì)算,涉及到條件控制比較多,一開(kāi)始用ifelifelif……覺(jué)得很煩人,后來(lái)發(fā)現(xiàn)用dict就很方便,比switch還要簡(jiǎn)單優(yōu)美。

            說(shuō)到dict呢,順便說(shuō)一下Python內(nèi)置的list、tuple和dict類(lèi)型。這個(gè)的確很方便,在C#里做同樣的事情要引用Collections,而Python就簡(jiǎn)單的多了,對(duì)于做科學(xué)計(jì)算的確簡(jiǎn)化了許多工作。不過(guò)Python用類(lèi)型不事先定義,一開(kāi)始我還是不太習(xí)慣,總是int a,str b的,后來(lái)發(fā)現(xiàn),這不就是C#里的generics嘛!是個(gè)好東西??!而且Python的函數(shù)功能也很強(qiáng)大,有匿名函數(shù)、多返回值、列表內(nèi)涵、關(guān)鍵字參數(shù)等等,極大的簡(jiǎn)化了編程工作。最早在STL、Boost及C#里看到這些特性的時(shí)候我還驚為天人,學(xué)了Python才知道這東西也沒(méi)那么神秘——基本手段嘛。

            此外,Python還有一個(gè)很nice的功能就是exec、execfile和eval。對(duì)我來(lái)說(shuō)這個(gè)非常實(shí)用,因?yàn)樽鲇?jì)算時(shí)總有些函數(shù)需要在運(yùn)行時(shí)才導(dǎo)入,例如y =a +func(b),func()的形式事先不知道,運(yùn)行時(shí)根據(jù)用戶需要輸入。以前用別的語(yǔ)言實(shí)現(xiàn)這個(gè)功能要費(fèi)好大勁(用表達(dá)式解析器等),現(xiàn)在Python直接內(nèi)置了它。換句話說(shuō),Python可以作為Python程序自己的腳本語(yǔ)言!Python實(shí)在也太強(qiáng)大了!正如那句Python社區(qū)中很有名的話所說(shuō)的:“battery included”!要我說(shuō),Python不僅帶了電池,充電器它TMD都帶著呢!

            三、庫(kù)及跨平臺(tái)

            Python的第三方庫(kù)很多,特別是計(jì)算這一塊,Python比C#的庫(kù)要豐富一些,而且用的人更多。我現(xiàn)在已經(jīng)用了igraph和networkx(圖論與復(fù)雜網(wǎng)絡(luò))、numpy和scipy(數(shù)值計(jì)算)以及matplotlib和cairo(圖表和可視化),python(x,y)項(xiàng)目里還集成了更多的科學(xué)計(jì)算庫(kù)。當(dāng)然這和搞科學(xué)計(jì)算的老外大多用非windows平臺(tái)有關(guān),我接觸的多數(shù)人都是用unix/linux平臺(tái)(給人家發(fā)Email都不好意思帶word附件),在這些平臺(tái)下雖然有Mono支持C#,但用的人畢竟還少。C和Fortran的科學(xué)計(jì)算庫(kù)倒是不少,不過(guò)多數(shù)都提供了Python的封裝或Python寫(xiě)的替代品,所以就不需要自己重復(fù)造輪子了。我現(xiàn)在已經(jīng)完全放棄了擴(kuò)展那個(gè)QuickGraph的想法,因?yàn)槲以僮鲀赡暌糙s不上igraph和networkx,而且關(guān)鍵是我做的東西還沒(méi)人用 囧……

            此外,Python可用的GUI庫(kù)也很多:Tkinter,wxPython,PyQt,PyGTK,PyWin等等一大堆。除了PyWin,大多數(shù)GUI都是跨平臺(tái)的。這點(diǎn)很好,再也不用擔(dān)心MS卡脖子了(偶現(xiàn)在還是在用D版,以后限制嚴(yán)格了就到Linux下接著做這點(diǎn)事),自己的知識(shí)、技術(shù)可以一直積累延續(xù),而不用從頭開(kāi)始。當(dāng)然GUI庫(kù)不可能都學(xué)都用,學(xué)好一個(gè)應(yīng)該就夠了。試了上面幾個(gè)庫(kù)后,我選擇了PyQt4,原因是看到它Demo里做的東西比較漂亮,而且Qt的信號(hào)/插槽(signals/slots)機(jī)制也比回調(diào)(callback)機(jī)制好理解。此外,對(duì)初學(xué)者很重要的一點(diǎn)是,Qt的中文書(shū)比wxPython要多。注意不是PyQt,PyQt的中文書(shū)還是比較少的。wxPython我只找到了一本很厚的《wxPython In Action》。書(shū)是不錯(cuò),不過(guò)我比較怕看厚書(shū),因?yàn)闀r(shí)間總是有限的,最好都是In Nutshell之類(lèi)的小冊(cè)子,頭天睡前翻一翻,第二天就可以寫(xiě)出想要的東西來(lái)。

            四、Web開(kāi)發(fā)

            我學(xué)Python的主要目的是為了做一些數(shù)值計(jì)算的小程序,因?yàn)樽鼍W(wǎng)絡(luò)分析總是要對(duì)大量的數(shù)據(jù)進(jìn)行分析計(jì)算,Python簡(jiǎn)潔的語(yǔ)法和豐富的第三方庫(kù)可以極大地提高我的工作效率。不過(guò)作研究只是為了興趣,要養(yǎng)家糊口還是要做一些短平快的項(xiàng)目(慘?。?。這兩年做的比較多的就是與工程相結(jié)合的Web應(yīng)用(因?yàn)槲覍?dǎo)師的方向是GIS與交通設(shè)計(jì)信息化)。以前一直是用ASP.Net在做,從1.0到2.0再到3.5,一路做下來(lái)對(duì)ASP.Net已經(jīng)比較熟了。因?yàn)閷W(xué)Python,也特意關(guān)注了一下Python的Web開(kāi)發(fā)功能。

            現(xiàn)在看來(lái)似乎Django很熱(這個(gè)我又不知道應(yīng)該怎么念,不過(guò)恰好我有個(gè)朋友叫“邸建國(guó)”,所以我第一眼看到Django就念成這個(gè)音了 :)。
            百度百科上介紹說(shuō)“Django的主要目的是簡(jiǎn)便、快速的開(kāi)發(fā)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的網(wǎng)站。它強(qiáng)調(diào)代碼復(fù)用,多個(gè)組件可以很方便的以“插件”形式服務(wù)于整個(gè)框架,Django有許多功能強(qiáng)大的第三方插件,你甚至可以很方便的開(kāi)發(fā)出自己的工具包。這使得Django具有很強(qiáng)的可擴(kuò)展性。它還強(qiáng)調(diào)快速開(kāi)發(fā)和DRY(Do Not Repeat Yourself)原則”。聽(tīng)上去不錯(cuò),上網(wǎng)找到了Python高手
            limodou的《Django Step by Step》教程,粗看了一下沒(méi)有入門(mén),暫時(shí)還是先用我的ASP.Net吧,因?yàn)槲腋杏X(jué)目前ASP.Net可用的資源更多,對(duì)我來(lái)說(shuō)更加DRY。以后有閑了再慢慢跟“邸建國(guó)”切磋。

            五、體量和效率

            因?yàn)樽隹茖W(xué)計(jì)算,我很重視語(yǔ)言及開(kāi)發(fā)環(huán)境的“輕量級(jí)”。什么叫“輕量級(jí)”呢?對(duì)我來(lái)說(shuō)就是在我256M內(nèi)存的老本上能歡快地跑起來(lái) 囧……。我的爛機(jī)是單位淘汰的一臺(tái)聯(lián)想昭陽(yáng)V80,CPU是P4 1.6的,讓他跑.Net 3.5的確是難為他老人家了!所以在這臺(tái)機(jī)器上我主要用Dev C++和SharpDevelop(Visual Studio在這臺(tái)機(jī)器上啟動(dòng)都很困難)作數(shù)值計(jì)算的程序。我的另外一臺(tái)本本是小黑X61,這個(gè)性能還可以,我用它上網(wǎng)、寫(xiě)論文、玩游戲等等(不過(guò)X61的顯卡很弱,做OpenGL的程序時(shí)得到單位的工作站上,當(dāng)然玩實(shí)況和FIFA也得去那個(gè)工作站上:)。因?yàn)榇笠?guī)模網(wǎng)絡(luò)分析花的時(shí)間會(huì)比較長(zhǎng)(幾小時(shí)到幾天),這些計(jì)算的臟活累活就扔給V80了?,F(xiàn)在用Python,IDE我選了PythonWin和Spyder(見(jiàn)我的另一篇文章),感覺(jué)這兩個(gè)IDE還比較輕量,很適合我的硬件環(huán)境。

            Python的運(yùn)行效率我感覺(jué)和C#差不多,因?yàn)槎加昧颂摂M機(jī),但Python比C/C++還是要差一截。我對(duì)比了igraph(C寫(xiě)的)和networkx(Python寫(xiě)的)兩個(gè)庫(kù),生成同樣規(guī)模的一個(gè)隨機(jī)圖,igraph比networkx運(yùn)行時(shí)間少一個(gè)數(shù)量級(jí)(Drew Conway做的對(duì)比結(jié)果也類(lèi)似,見(jiàn)這里)。換句話說(shuō),對(duì)于大規(guī)模的網(wǎng)絡(luò)分析問(wèn)題就是等幾小時(shí)和等幾天的區(qū)別了。不過(guò)還好,大多數(shù)老牌的科學(xué)計(jì)算庫(kù)都是用C和Fortran寫(xiě)的,并且提供了Python接口,所以也不必太擔(dān)心。我們可以把Python當(dāng)作“膠水”[1]來(lái)用:對(duì)于效率要求很高的部分,就調(diào)用C/C++庫(kù)或自己寫(xiě)C/C++的模塊,這也是我選擇Python語(yǔ)言的一個(gè)主要考慮。

            復(fù)制代碼
            """注1:引自百度百科http://baike.baidu.com/view/21087.htm:
            在實(shí)際開(kāi)發(fā)中,python常被昵稱(chēng)為膠水語(yǔ)言,這不是說(shuō)他會(huì)把你的手
            指粘住,而是說(shuō)他能夠很輕松的把用其他語(yǔ)言制作的各種模塊(尤其是
            C/C++)輕松地聯(lián)結(jié)在一起。常見(jiàn)的一種應(yīng)用情形是,使用 python快
            速生成程序的原型(有時(shí)甚至是程序的最終界面),然后對(duì)其中有特別
            要求的部分,用更合適的語(yǔ)言改寫(xiě),比如3D游戲中的圖形渲染模塊,速
            度要求非常高,就可以用C++重寫(xiě)。
            """
            復(fù)制代碼

             六、總結(jié)

            作為一個(gè)剛從C#轉(zhuǎn)到Python的FreshMan,一周來(lái)的總體感覺(jué)就是:Python的確易學(xué)、易用、強(qiáng)大。像我這樣的非計(jì)算機(jī)專(zhuān)業(yè)畢業(yè)、非程序員工作的人,一星期就已經(jīng)入門(mén)Python,并且能用它寫(xiě)出自己“用著方便、看著舒服”的程序。很符合我學(xué)Python的預(yù)期:提高自己的工作效率;也印證了Bruce Eckel的觀點(diǎn):“Python可能是唯一一種旨在幫助程序員把事情弄得更加簡(jiǎn)單的語(yǔ)言”[2]。

             

            """注2:引自《簡(jiǎn)明 Python 教程》第一章,
            http://www.woodpecker.org.cn:9081/doc/abyteofpython_cn/chinese/ch01s04.html,
            這本書(shū)是適合新手閱讀的一部好書(shū),舒服的web排版很適合用手機(jī)在線閱讀,推薦給大家:)
            """

             

            附:《從C#到Python》系列連載目錄

            posted on 2016-11-07 09:23 思月行云 閱讀(411) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Python
            亚洲国产精品成人久久蜜臀 | 国产午夜精品久久久久九九| 99久久国产精品免费一区二区| 久久男人中文字幕资源站| 久久精品国内一区二区三区| 77777亚洲午夜久久多喷| 久久人妻无码中文字幕| 老男人久久青草av高清| 一本色道久久综合狠狠躁篇| 亚洲国产精品综合久久一线 | 色综合久久久久久久久五月| 久久无码高潮喷水| 国产成年无码久久久免费| 97香蕉久久夜色精品国产| 日本亚洲色大成网站WWW久久| 久久九九久精品国产| 香蕉久久AⅤ一区二区三区| 色婷婷久久综合中文久久一本| 亚洲精品无码专区久久同性男| 国产69精品久久久久APP下载| 伊人久久综合成人网| 国产三级久久久精品麻豆三级 | 欧美亚洲另类久久综合婷婷| 婷婷国产天堂久久综合五月| 亚洲午夜无码久久久久| 久久亚洲精品人成综合网| 99精品久久精品一区二区| 999久久久免费国产精品播放| 久久激情五月丁香伊人| 久久精品成人欧美大片| 成人综合伊人五月婷久久| 久久国产精品波多野结衣AV| 97视频久久久| 久久精品国产秦先生| 久久久久亚洲精品男人的天堂| 久久精品国产AV一区二区三区| 97r久久精品国产99国产精| 久久男人中文字幕资源站| 精品久久久久久久无码| 久久久久无码国产精品不卡| 亚洲国产精品无码久久一区二区 |