flakjfaklfjalfa
摘要:代碼如散文作為一門計(jì)算機(jī)語言來說,會(huì)有下面的特點(diǎn)。而則通過這些擴(kuò)展庫將眾多的開源函數(shù)庫連接在一起,是名符其實(shí)的膠水語言。下面是我們將會(huì)在后面用到的代碼在線查看一步步搭建物聯(lián)網(wǎng)系統(tǒng)圖靈電子書版一步步搭建物聯(lián)網(wǎng)系統(tǒng)
Python 代碼如散文
作為一門計(jì)算機(jī)語言來說,Python會(huì)有下面的特點(diǎn)。
語言學(xué)習(xí)起來容易
解決生活中的實(shí)際問題
支持多學(xué)科
我們可以和其他不是腳本語言的語言進(jìn)行一個(gè)簡(jiǎn)單的對(duì)比,如C,你需要去編譯去運(yùn)行,有時(shí)候還需要解決跨平臺(tái)問題,本來你是在你的Windows上運(yùn)行得好好的,但是有一天你換了一個(gè)Mac電腦的時(shí)候,問題變得很棘手,你甚至不知道怎么去解決問題。我沒有用過MFC,聽說很方便,但是在其他平臺(tái)下就沒有一個(gè)好的解決方案。這里可能跑得有點(diǎn)遠(yuǎn),但是不同的用戶可能在不同的平臺(tái)上,這也就是腳本語言的優(yōu)勢(shì)所在了。
代碼與散文你可能聽過,也可能了解過,不過在這里我們可能不會(huì)去講述那些基礎(chǔ)的語法的東西,我們想說的是代碼格式的重要性,在html中你可以這樣去寫你的代碼
htmlThis is a Title flakjfaklfjalfa
又或者是js的minify,它可能會(huì)使你的代碼看起來像是這樣的:
javascriptfunction NolTracker(b,a){this.pvar=b;this.mergeFeatures(a)}
可能的是如果是python的話,你可能會(huì)遇到下面的問題。。
bashFile "steps.py", line 10 try: ^ IndentationError: expected an indented block
如果你對(duì)JSLint、Lint這類的工具有點(diǎn)印象的話,你也可以認(rèn)為python集成了這類工具。整潔的代碼至少應(yīng)該看上去要有整潔的衣服,就好像是我們看到的一個(gè)人一樣,而后我們才會(huì)有一個(gè)好的印象。更主要的一點(diǎn)是代碼是寫給人看的,而衣服更多的時(shí)候?qū)τ谙裎疫@樣的人來說,他首先應(yīng)該是要保暖的,其次對(duì)于一個(gè)懶的人來說。。。
程序應(yīng)該是具有可讀性的短文,它將在計(jì)算機(jī)上執(zhí)行,從而解決某些問題
我們需要去讀懂別人的代碼,別人也需要去讀懂我們的代碼。計(jì)算機(jī)可以無條件地執(zhí)行你那未經(jīng)編排過的程序,但是人就不是如此了。
javascript var calc={add: function(a,b){return a+b;},sub: function(a,b){return a-b;},dif: function(a,b){if(a>b){return a;}else{return b;}}}
上面的代碼相對(duì)于下面的代碼可讀性沒有那么多,但是計(jì)算機(jī)可以無條件地執(zhí)行上面的代碼。上面的代碼對(duì)于網(wǎng)絡(luò)傳輸來說是好的,但是對(duì)于人來說并不是如此,我們需要一些工具來輔助我們?nèi)プx懂上面的代碼。如果代碼上寫得沒有一點(diǎn)可讀性,諸如函數(shù)命名沒有多少實(shí)際意義,如果我們把前面的函數(shù)就成這樣:
javascriptvar c={ a: function(a,b){ return a+b; }, s: function(a,b){ return a-b; }, d: function(a,b){ if(a>b){ return a; }else{ return b; } } }
那么只有在我們理解了這個(gè)函數(shù)是干什么之后才能理解函數(shù)是干什么,而不是光看函數(shù)名就可以了。
在Javascript解決一個(gè)函數(shù)的辦法有很多,在其他一些語言如Ruby或者Perl中也是如此,解決問題的辦法有很多,對(duì)于寫代碼的人來說是一個(gè)享受的過程,但是對(duì)于維護(hù)的人來說并非如此。而這個(gè)和Python的思想不是很一致的是,Python設(shè)計(jì)的理念是
對(duì)于特定的問題,只要有一種最好的方法來解決就夠了
可讀性的代碼在今天顯得比以前重要的多,以前寫程序的時(shí)候我們需要去考慮使用匯編或者其他工具來提高程序的效率。
.global _start .text _start: # write(1, message, 13) mov $1, %rax # system call 1 is write mov $1, %rdi # file handle 1 is stdout mov $message, %rsi # address of string to output mov $13, %rdx # number of bytes syscall # invoke operating system to do the write # exit(0) mov $60, %rax # system call 60 is exit xor %rdi, %rdi # we want return code 0 syscall # invoke operating system to exit message: .ascii "Hello, world "
所以上面的代碼的可讀性在今天新生一代的程序員來說可能沒有那么容易理解。芯片運(yùn)行的速度越來越快,在程序上我們也需要一個(gè)越來越快的解決方案,而所謂的越來越快的解決方案指的不是運(yùn)行速度上,而是開發(fā)速度上。如果你沒有辦法在同樣時(shí)間內(nèi)開發(fā)出更好的程序,那么你就可能輸給你的競(jìng)爭(zhēng)對(duì)手。
開始之前我們終于又從一種語言跳到了另外一種語言,我們可能習(xí)慣了一種模式,而不敢于去嘗試新的東西,這些或許是我們的一些習(xí)慣又或者是因?yàn)楹ε碌鹊取?/p>
作為另外一個(gè)跨平臺(tái)能力很強(qiáng)的語言,這里說的是與Javascript、HTML比較,或許你會(huì)覺得C算是最好的,但是我們這里討論更多的是腳本語言,也就是直接可以運(yùn)行的。在現(xiàn)在主流的大多數(shù)移動(dòng)平臺(tái)上,python也有良好的支持,如Android,IOS,只是這些算是類Unix系統(tǒng)內(nèi)核,python還支持之前Nokia的Symbian。
開始之前我們需要確認(rèn)我們的平臺(tái)上已經(jīng)有了python環(huán)境,也就是可以運(yùn)行下面的Hello,World,你可以在網(wǎng)上很多地方看到,最簡(jiǎn)單的地方還是到官網(wǎng),又或者是所用移動(dòng)平臺(tái)的store下載。
Python的Hello,WorldPython的Hello,World有兩種形式,作為一種腳本語言來說,Javascript也是一種腳本語言,只是兩者之間有太多的不同之處,每個(gè)人都會(huì)有不同的選擇對(duì)于一種語言用來作為其的習(xí)慣。于是這就是我們的
print "Hello,World"
當(dāng)我們把我們的腳本在shell環(huán)境下運(yùn)行時(shí)
bash>>> print "Hello,world" File "", line 1 print "Hello,world" ^ IndentationError: unexpected indent >>> print "Hello,world" Hello,world >>>
如果你沒有預(yù)料到縮進(jìn)帶來的問題的時(shí)候,這就是一個(gè)問題了。
和我們?cè)贘avascript或者是CSS里面一樣,我們也可以用一個(gè)文件的方式來寫入我們的代碼,文件后綴名是py,所以創(chuàng)建一個(gè)helloworld.py,輸入上面的代碼,然后執(zhí)行
python helloworld.py
一個(gè)理想的結(jié)果,或許你試過C語言的helloworld,如果了解過GCC的話應(yīng)該是可以這樣的:
./a.out
也就是執(zhí)行編譯完后的程序,需要注意的是helloworld.py沒有編譯,不過也會(huì)輸出
Hello,world我們想要的Hello,World
我們想展示的是如何結(jié)合前面學(xué)習(xí)的內(nèi)容做一個(gè)更有意思的Hello,World。
pythonimport cherrypy class HelloWorld(object): def index(self): return "Hello World!" index.exposed = True cherrypy.quickstart(HelloWorld())算法
我們需要去了解算法(algorithm),引經(jīng)據(jù)典的話就是這樣子:
a process or set of rules to be followed in calculations or other problem-solving operations, especially by a computer
也就是計(jì)算或其他解決問題的操作需要遵循的一個(gè)過程或者一套規(guī)則,書上還提到的說法是——解決問題的訣竅,讓我想起了hack一詞。我們總會(huì)去想某些東西是否有一個(gè)更快的計(jì)算方法,有時(shí)候在處理某些問題上也顯示了一個(gè)好的算法的重要性。
實(shí)用主義哲學(xué)(來自于:HyryStudio)
大多數(shù)工程師、科學(xué)家使用科學(xué)計(jì)算軟件的目的都是為了快速解決其工作中遇到的問題,而不是開發(fā)出一套完整的軟件。這就是為什么MATLAB這樣的商用科學(xué)計(jì)算軟件十分流行的原因。而Python在這一點(diǎn)上實(shí)際上和MATLAB十分相似,我們也可以使用Python眾多的擴(kuò)展庫快速寫出一次性的數(shù)據(jù)處理、運(yùn)算的腳本。然而由于Python語言的一些高級(jí)特性,以及眾多的科學(xué)計(jì)算之外的擴(kuò)展庫,我們可以將積累下來的一次性腳本進(jìn)行改造,為它們提供命令行、GUI、數(shù)據(jù)庫、網(wǎng)絡(luò)等眾多接口,最終成為一套完整的工具包或者實(shí)用的計(jì)算軟件。而且由于是開源的自由軟件,我們可以在任何系統(tǒng)中安裝Python環(huán)境,運(yùn)行我們 的程序。
Python一直保持著很強(qiáng)的實(shí)用主義,它通常不會(huì)去試著重新開發(fā)一整套函數(shù)庫,而是將現(xiàn)有的開源函數(shù)庫包裝成其擴(kuò)展庫。而Python則通過這些擴(kuò)展庫將眾多的開源函數(shù)庫連接在一起,是名符其實(shí)的膠水語言。例如由華盛頓大學(xué)的教授主導(dǎo)開發(fā)的 Sage ,就是一套以代替MATLAB、Mathematica、Maple等商用科學(xué)計(jì)算軟件為目的的開源系統(tǒng)。它通過Python結(jié)合了眾多的開源科學(xué)計(jì)算軟件,并通過網(wǎng)頁瀏覽器提供了一個(gè)與其交互的記事本文檔界面。
Python的科學(xué)計(jì)算擴(kuò)展庫非常多,不同專業(yè)的技術(shù)人員都可以找到適合自己的擴(kuò)展庫。下面是我經(jīng)常會(huì)用到的一個(gè)非常不完全的列表:
NumPy + SciPy + matplotlib + IPython : 這幾個(gè)應(yīng)該是每位開發(fā)者都應(yīng)具備的擴(kuò)展庫。NumPy提供了多維數(shù)組以及眾多的處理函數(shù),SciPy提供了各種數(shù)值運(yùn)算功能,matplotlib能繪制 出精美的二維圖表,IPython則提供了一個(gè)超強(qiáng)的命令行,最新版的IPython還添加于Sage類似的瀏覽器的記事本界面(notebook)。
SciKits : 其中包括許多獨(dú)立的擴(kuò)展庫,作為SciPy的補(bǔ)充。其中 scikit-learn 是一套機(jī)器學(xué)習(xí)庫,包含了比較完善的文檔以及眾多的實(shí)例程序。
Pandas : 以Python世界中 R 的替代品為目標(biāo)的數(shù)據(jù)分析庫。根據(jù)其官方網(wǎng)站的測(cè)試,Pandas在許多方面的性能都比R要高。
ETS : 這是一套Enthought公司開發(fā)的函數(shù)庫,其中的 Mayavi 能很方便地對(duì)數(shù)據(jù)進(jìn)行三維可視化。
OpenCV : 這是一套計(jì)算機(jī)視覺庫,目前的最新版本已經(jīng)提供了十分完備的Python接口,能夠調(diào)用OpenCV中眾多的圖像處理、模式識(shí)別函數(shù)直接對(duì)NumPy數(shù)組進(jìn)行處理。
包管理關(guān)于Python的包管理
Eggs 格式是 setuptools 引入的一種文件格式,它使用 .egg 擴(kuò)展名,用于 Python 模塊的安裝。
pip 是目前 python 包管理的事實(shí)標(biāo)準(zhǔn),2008年發(fā)布。它被用作 easy_install 的替代品,但是它仍有大量的功能建立在 setuptools 組件之上。
python requestsRequests 是使用 Apache2 Licensed 許可證的 HTTP 庫。用 Python 編寫,真正的為人類著想。 Python 標(biāo)準(zhǔn)庫中的 urllib2 模塊提供了你所需要的大多數(shù) HTTP 功能,但是它的 API太渣了。它是為另一個(gè)時(shí)代、另一個(gè)互聯(lián)網(wǎng)所創(chuàng)建的。它需要巨量的工作,甚至包括各種方法覆蓋,來完成最簡(jiǎn)單的任務(wù)。
以安裝requests為例:
命令:
bashsudo pip install requests
結(jié)果:
bashDownloading/unpacking requests Downloading requests-2.4.3-py2.py3-none-any.whl (459kB): 459kB downloaded Installing collected packages: requests Successfully installed requests Cleaning up...
用這個(gè)庫我們可以做些什么?看看官網(wǎng)的示例:
bash>>> import requests >>> r = requests.get("https://github.com/timeline.json") >>> r.json()
到現(xiàn)在你會(huì)發(fā)現(xiàn)我們沒有說到任何的Python語法,這不是一本關(guān)于Python語法的書,如我們?cè)陂_頭所說的。下面是我們將會(huì)在后面用到的代碼
python#!/usr/bin/env python import requests url = "http://b.phodal.com/athome/1" r = requests.get(url) print r.text
在線查看:一步步搭建物聯(lián)網(wǎng)系統(tǒng)
圖靈-電子書版一步步搭建物聯(lián)網(wǎng)系統(tǒng)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/45348.html
摘要:也可以補(bǔ)充好之前在這個(gè)最小物聯(lián)網(wǎng)系統(tǒng)缺失的那些東西,給那些正在開始試圖去解決編程問題的人。在線查看一步步搭建物聯(lián)網(wǎng)系統(tǒng)圖靈電子書版一步步搭建物聯(lián)網(wǎng)系統(tǒng) 某一天,正走在回學(xué)校的路上的我突然想到:未來將會(huì)是一個(gè)科技的時(shí)代——雖然現(xiàn)在也是——只是在未來,科技將會(huì)無處不在。如果我們依舊對(duì)周圍這些無處不在的代碼一無所知的話,或許我們會(huì)成為黑客帝國之中被控制的普通人。于是開始想著,有一天人們會(huì)像學(xué)...
摘要:也可以補(bǔ)充好之前在這個(gè)最小物聯(lián)網(wǎng)系統(tǒng)缺失的那些東西,給那些正在開始試圖去解決編程問題的人。在線查看一步步搭建物聯(lián)網(wǎng)系統(tǒng)圖靈電子書版一步步搭建物聯(lián)網(wǎng)系統(tǒng) 某一天,正走在回學(xué)校的路上的我突然想到:未來將會(huì)是一個(gè)科技的時(shí)代——雖然現(xiàn)在也是——只是在未來,科技將會(huì)無處不在。如果我們依舊對(duì)周圍這些無處不在的代碼一無所知的話,或許我們會(huì)成為黑客帝國之中被控制的普通人。于是開始想著,有一天人們會(huì)像學(xué)...
摘要:也可以補(bǔ)充好之前在這個(gè)最小物聯(lián)網(wǎng)系統(tǒng)缺失的那些東西,給那些正在開始試圖去解決編程問題的人。在線查看一步步搭建物聯(lián)網(wǎng)系統(tǒng)圖靈電子書版一步步搭建物聯(lián)網(wǎng)系統(tǒng) 某一天,正走在回學(xué)校的路上的我突然想到:未來將會(huì)是一個(gè)科技的時(shí)代——雖然現(xiàn)在也是——只是在未來,科技將會(huì)無處不在。如果我們依舊對(duì)周圍這些無處不在的代碼一無所知的話,或許我們會(huì)成為黑客帝國之中被控制的普通人。于是開始想著,有一天人們會(huì)像學(xué)...
摘要:無處不在的三劍客這時(shí)我們終于了解了我們的三劍客,他們也就這么可以結(jié)合到一起了,是這一切的基礎(chǔ)。無處不在的三劍客就這樣到了這里,寫得似乎很多也很少,但是還是沒有做出來一個(gè)東西,于是我們朝著這樣一個(gè)方向前進(jìn)。 無處不在的三劍客 這時(shí)我們終于了解了我們的三劍客,他們也就這么可以結(jié)合到一起了,HTML+Javascript+CSS是這一切的基礎(chǔ)。而我們用到的其他語言如PHP、Python、R...
閱讀 1580·2021-09-26 09:46
閱讀 2665·2021-09-07 09:59
閱讀 2750·2021-09-07 09:59
閱讀 1856·2019-08-30 14:20
閱讀 922·2019-08-26 13:39
閱讀 3173·2019-08-26 12:24
閱讀 771·2019-08-26 11:55
閱讀 1212·2019-08-23 16:49