摘要:另一個(gè)賦值語(yǔ)句將名稱關(guān)聯(lián)到出現(xiàn)在莎士比亞劇本中的所有去重詞匯的集合,總計(jì)個(gè)。表達(dá)式是一個(gè)復(fù)合表達(dá)式,計(jì)算出正序或倒序出現(xiàn)的莎士比亞詞匯集合。在意圖上并沒(méi)有按照莎士比亞或者回文來(lái)設(shè)計(jì),但是它極大的靈活性讓我們用極少的代碼處理大量文本。
1.1 引言
來(lái)源:1.1 Introduction
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
計(jì)算機(jī)科學(xué)是一個(gè)極其寬泛的學(xué)科。全球的分布式系統(tǒng)、人工智能、機(jī)器人、圖形、安全、科學(xué)計(jì)算,計(jì)算機(jī)體系結(jié)構(gòu)和許多新興的二級(jí)領(lǐng)域,每年都會(huì)由于新技術(shù)和新發(fā)現(xiàn)而擴(kuò)展。計(jì)算機(jī)科學(xué)的快速發(fā)展廣泛影響了人類生活。商業(yè)、通信、科學(xué)、藝術(shù)、休閑和政治都被計(jì)算機(jī)領(lǐng)域徹底改造。
計(jì)算機(jī)科學(xué)的巨大生產(chǎn)力可能只是因?yàn)樗鼧?gòu)建在一系列優(yōu)雅且強(qiáng)大的基礎(chǔ)概念上。所有計(jì)算都以表達(dá)信息、指定處理它所需的邏輯、以及設(shè)計(jì)管理邏輯復(fù)雜性的抽象作為開(kāi)始。對(duì)這些基礎(chǔ)的掌握需要我們精確理解計(jì)算機(jī)如何解釋程序以及執(zhí)行計(jì)算過(guò)程。
這些基礎(chǔ)概念在伯克利長(zhǎng)期教授,使用由Harold Abelson、Gerald Jay Sussman和Julie Sussman創(chuàng)作的經(jīng)典教科書《計(jì)算機(jī)科學(xué)的構(gòu)造與解釋》(SICP)。這個(gè)講義大量借鑒了這本書,原作者慷慨地使它可用于改編和復(fù)用。
我們的智力之旅一旦出發(fā)就不能回頭了,我們也永遠(yuǎn)都不應(yīng)該對(duì)此有所期待。
1.1.1 在Python中編程我們將要學(xué)習(xí)計(jì)算過(guò)程的概念。計(jì)算過(guò)程是計(jì)算機(jī)中的抽象事物。在演化中,過(guò)程操縱著叫做數(shù)據(jù)的其它事物。過(guò)程的演化由叫做程序的一系列規(guī)則主導(dǎo)。人們創(chuàng)造程序來(lái)主導(dǎo)過(guò)程。實(shí)際上,我們使用我們的咒語(yǔ)來(lái)憑空創(chuàng)造出計(jì)算機(jī)的靈魂。
我們用于創(chuàng)造過(guò)程的程序就像巫師的魔法。它們由一些古怪且深?yuàn)W的編程語(yǔ)言中的符號(hào)表達(dá)式所組成,這些語(yǔ)言指定了我們想讓過(guò)程執(zhí)行的任務(wù)。
在一臺(tái)工作正確的計(jì)算機(jī)上,計(jì)算過(guò)程準(zhǔn)確且嚴(yán)謹(jǐn)?shù)貓?zhí)行程序。所以,就像巫師的學(xué)徒那樣,程序員新手必須學(xué)會(huì)理解和預(yù)測(cè)他們的魔法產(chǎn)生的結(jié)果。
--Abelson & Sussman, SICP (1993)
語(yǔ)言并不是你學(xué)到的東西,而是你參與的東西。
--Arika Okrent
為了定義計(jì)算過(guò)程,我們需要一種編程語(yǔ)言,最好是一種許多人和大量計(jì)算機(jī)都能懂的語(yǔ)言。這門課中,我們將會(huì)使用Python語(yǔ)言。
Python是一種廣泛使用的編程語(yǔ)言,并且在許多職業(yè)中都有它的愛(ài)好者:Web程序員、游戲工程師、科學(xué)家、學(xué)者,甚至新編程語(yǔ)言的設(shè)計(jì)師。當(dāng)你學(xué)習(xí)Python時(shí),你就加入到了一個(gè)數(shù)百萬(wàn)人的開(kāi)發(fā)者社群。開(kāi)發(fā)者社群是一個(gè)極其重要的組織:成員可以互相幫助來(lái)解決問(wèn)題,分享他們的代碼和經(jīng)驗(yàn),以及一起開(kāi)發(fā)軟件和工具。投入的成員經(jīng)常由于他們的貢獻(xiàn)而出名,并且收到廣泛的尊重。也許有一天你會(huì)被提名為Python開(kāi)發(fā)者精英。
Python語(yǔ)言自身就是一個(gè)大型志愿者社群的產(chǎn)物,并且為其貢獻(xiàn)者的多元化而自豪。這種語(yǔ)言在20世紀(jì)80年代末由Guido van Rossum設(shè)計(jì)并首次實(shí)現(xiàn)。他的Python3教程的第一章解釋了為什么Python在當(dāng)今眾多語(yǔ)言之中如此流行。
Python適用于作為教學(xué)語(yǔ)言,因?yàn)榭v觀它的歷史,Python的開(kāi)發(fā)者強(qiáng)調(diào)了Python代碼對(duì)人類的解釋性,并在Python之禪中美觀、簡(jiǎn)約和可讀的原則下進(jìn)一步加強(qiáng)。Python尤其適用于課堂,因?yàn)樗鼘挿旱奶匦灾С执罅康牟煌幊田L(fēng)格,我們將要探索它們。在Python中編程沒(méi)有單一的解法,但是有一些習(xí)俗在開(kāi)發(fā)者社群之間流傳,它們可以使現(xiàn)有程序的閱讀、理解,以及擴(kuò)展變得容易。所以,Python的靈活性和易學(xué)性的組合可以讓學(xué)生們探索許多編程范式,之后將它們新學(xué)到的知識(shí)用于數(shù)千個(gè)正在開(kāi)發(fā)的項(xiàng)目中。
這些講義通過(guò)使用抽象設(shè)計(jì)的技巧和嚴(yán)謹(jǐn)?shù)挠?jì)算模型,來(lái)快速介紹Python的特性。此外,這些講義提供了Python編程的實(shí)踐簡(jiǎn)介,包含一些高級(jí)語(yǔ)言特性和展示示例。通過(guò)這門課,學(xué)習(xí)Python將會(huì)變成自然而然的事情。
然而,Python是一門生態(tài)豐富的語(yǔ)言,帶有大量特性和用法。我們講到基本的計(jì)算機(jī)科學(xué)概念時(shí),會(huì)刻意慢慢地介紹他們。對(duì)于有經(jīng)驗(yàn)的學(xué)生,他們打算一口氣學(xué)完語(yǔ)言的所有細(xì)節(jié),我們推薦他們閱讀Mark Pilgrim的書Dive Into Python 3,它在網(wǎng)上可以免費(fèi)閱讀。這本書的主題跟這門課極其不同,但是這本書包含了許多關(guān)于使用Python的寶貴的實(shí)用信息。事先告知:不像這些講義,Dive Into Python 3需要一些編程經(jīng)驗(yàn)。
開(kāi)始在Python中編程的最佳方法就是直接和解釋器交互。這一章會(huì)描述如何安裝Python3,使用解釋器開(kāi)始交互式會(huì)話,以及開(kāi)始編程。
1.1.2 安裝Python3就像所有偉大的軟件一樣,Python具有許多版本。這門課會(huì)使用Python3最新的穩(wěn)定版本(本書編寫時(shí)是3.2)。許多計(jì)算機(jī)都已經(jīng)安裝了Python的舊版本,但是它們可能不滿足這門課。你應(yīng)該可以在這門課上使用任何能安裝Python3的計(jì)算機(jī)。不要擔(dān)心,Python是免費(fèi)的。
Dive Into Python 3擁有一個(gè)為所有主流平臺(tái)準(zhǔn)備的詳細(xì)的安裝指南。這個(gè)指南多次提到了Python3.1,但是你最好安裝3.2(雖然它們的差異在這門課中非常微小)。EECS學(xué)院的所有教學(xué)機(jī)都已經(jīng)安裝了Python3.2。
1.1.3 交互式會(huì)話在Python交互式會(huì)話中,你可以在提示符>>>之后鍵入一些Python代碼。Python解釋器讀取并計(jì)算你輸入的東西,并執(zhí)行你的各種命令。
有幾種開(kāi)始交互式會(huì)話的途徑,并且具有不同的特性。把它們嘗試一遍來(lái)找出你最喜歡的方式。它們?nèi)慷荚诒澈笫褂昧讼嗤慕忉屍鳎–Python)。
最簡(jiǎn)單且最普遍的方式就是運(yùn)行Python3應(yīng)用。在終端提示符后(Mac/Unix/Linux)鍵入python3,或者在Windows上打開(kāi)Python3應(yīng)用。(譯者注:Windows上設(shè)置完P(guān)ython的環(huán)境變量之后,就可以在cmd或PowerShell中執(zhí)行相同操作了。)
有一個(gè)更加用戶友好的應(yīng)用叫做Idle3(idle3),可用于學(xué)習(xí)這門語(yǔ)言。Idie會(huì)高亮你的代碼(叫做語(yǔ)法高亮),彈出使用提示,并且標(biāo)記一些錯(cuò)誤的來(lái)源。Idle總是由Python自帶,所以你已經(jīng)安裝它了。
Emacs編輯器可以在它的某個(gè)緩沖區(qū)中運(yùn)行交互式會(huì)話。雖然它學(xué)習(xí)起來(lái)有些挑戰(zhàn),Emacs是個(gè)強(qiáng)大且多功能的編輯器,適用于任何語(yǔ)言。請(qǐng)閱讀61A的Emacs教程來(lái)開(kāi)始。許多程序員投入大量時(shí)間來(lái)學(xué)習(xí)Emacs,之后他們就不再切換編輯器了。
在所有情況中,如果你看見(jiàn)了Python提示符>>>,你就成功開(kāi)啟了交互式會(huì)話。這些講義使用提示符來(lái)展示示例,同時(shí)帶有一些輸入。
>>> 2 + 2 4
控制:每個(gè)會(huì)話都保留了你的歷史輸入。為了訪問(wèn)這些歷史,需要按下
想像會(huì)把不知名的事物用一種形式呈現(xiàn)出來(lái),詩(shī)人的筆再使它們具有如實(shí)的形象,空虛的無(wú)物也會(huì)有了居處和名字。
--威廉·莎士比亞,《仲夏夜之夢(mèng)》
為了介紹Python,我們會(huì)從一個(gè)使用多個(gè)語(yǔ)言特性的例子開(kāi)始。下一節(jié)中,我們會(huì)從零開(kāi)始,一步一步構(gòu)建整個(gè)語(yǔ)言。你可以將這章視為即將到來(lái)的特性的預(yù)覽。
Python擁有常見(jiàn)編程功能的內(nèi)建支持,例如文本操作、顯示圖形以及互聯(lián)網(wǎng)通信。導(dǎo)入語(yǔ)句
>>> from urllib.request import urlopen
為訪問(wèn)互聯(lián)網(wǎng)上的數(shù)據(jù)加載功能。特別是,它提供了叫做urlopen的函數(shù),可以訪問(wèn)到統(tǒng)一資源定位器(URL)處的內(nèi)容,它是互聯(lián)網(wǎng)上的某個(gè)位置。
語(yǔ)句和表達(dá)式:Python代碼包含語(yǔ)句和表達(dá)式。廣泛地說(shuō),計(jì)算機(jī)程序包含的語(yǔ)句
計(jì)算某個(gè)值
或執(zhí)行某個(gè)操作
語(yǔ)句通常用于描述操作。當(dāng)Python解釋器執(zhí)行語(yǔ)句時(shí),它執(zhí)行相應(yīng)操作。另一方面,表達(dá)式通常描述產(chǎn)生值的運(yùn)算。當(dāng)Python計(jì)算表達(dá)式時(shí),就會(huì)計(jì)算出它的值。這一章介紹了幾種表達(dá)式和語(yǔ)句。
賦值語(yǔ)句
>>> shakespeare = urlopen("http://inst.eecs.berkeley.edu/~cs61a/fa11/shakespeare.txt")
將名稱shakespeare和后面的表達(dá)式的值關(guān)聯(lián)起來(lái)。這個(gè)表達(dá)式在URL上調(diào)用urlopen函數(shù),URL包含了莎士比亞的37個(gè)劇本的完整文本,在單個(gè)文本文件中。
函數(shù):函數(shù)封裝了操作數(shù)據(jù)的邏輯。Web地址是一塊數(shù)據(jù),莎士比亞的劇本文本是另一塊數(shù)據(jù)。前者產(chǎn)生后者的過(guò)程可能有些復(fù)雜,但是我們可以只通過(guò)一個(gè)表達(dá)式來(lái)調(diào)用它們,因?yàn)閺?fù)雜性都塞進(jìn)函數(shù)里了。函數(shù)是這一章的主要話題。
另一個(gè)賦值語(yǔ)句
>>> words = set(shakespeare.read().decode().split())
將名稱words關(guān)聯(lián)到出現(xiàn)在莎士比亞劇本中的所有去重詞匯的集合,總計(jì)33,721個(gè)。這個(gè)命令鏈調(diào)用了read、decode和split,每個(gè)都操作銜接的計(jì)算實(shí)體:從URL讀取的數(shù)據(jù)、解碼為文本的數(shù)據(jù)、以及分割為單詞的文本。所有這些單詞都放在set中。
對(duì)象:集合是一種對(duì)象,它支持取交和測(cè)試成員的操作。對(duì)象整合了數(shù)據(jù)和操作數(shù)據(jù)的邏輯,并以一種隱藏其復(fù)雜性的方式。對(duì)象是第二章的主要話題。
表達(dá)式
>>> {w for w in words if len(w) >= 5 and w[::-1] in words} {"madam", "stink", "leets", "rever", "drawer", "stops", "sessa", "repaid", "speed", "redder", "devil", "minim", "spots", "asses", "refer", "lived", "keels", "diaper", "sleek", "steel", "leper", "level", "deeps", "repel", "reward", "knits"}
是一個(gè)復(fù)合表達(dá)式,計(jì)算出正序或倒序出現(xiàn)的“莎士比亞詞匯”集合。神秘的記號(hào)w[::-1]遍歷單詞中的每個(gè)字符,然而-1表明倒序遍歷(::表示第一個(gè)和最后一個(gè)單詞都使用默認(rèn)值)。當(dāng)你在交互式會(huì)話中輸入表達(dá)式時(shí),Python會(huì)在隨后打印出它的值,就像上面那樣。
解釋器:計(jì)算復(fù)合表達(dá)式需要可預(yù)測(cè)的過(guò)程來(lái)精確執(zhí)行解釋器的代碼。執(zhí)行這個(gè)過(guò)程,并計(jì)算復(fù)合表達(dá)式和語(yǔ)句的程序就叫解釋器。解釋器的設(shè)計(jì)與實(shí)現(xiàn)是第三章的主要話題。
與其它計(jì)算機(jī)程序相比,編程語(yǔ)言的解釋器通常比較獨(dú)特。Python在意圖上并沒(méi)有按照莎士比亞或者回文來(lái)設(shè)計(jì),但是它極大的靈活性讓我們用極少的代碼處理大量文本。
最后,我們會(huì)發(fā)現(xiàn),所有這些核心概念都是緊密相關(guān)的:函數(shù)是對(duì)象,對(duì)象是函數(shù),解釋器是二者的實(shí)例。然而,對(duì)這些概念,以及它們?cè)诖a組織中的作用的清晰理解,是掌握編程藝術(shù)的關(guān)鍵。
1.1.5 實(shí)踐指南Python正在等待你的命令。你應(yīng)當(dāng)探索這門語(yǔ)言,即使你可能不知道完整的詞匯和結(jié)構(gòu)。但是,要為錯(cuò)誤做好準(zhǔn)備。雖然計(jì)算機(jī)極其迅速和靈活,它們也十分古板。在斯坦福的導(dǎo)論課中,計(jì)算機(jī)的本性描述為
計(jì)算機(jī)的基本等式是:計(jì)算機(jī) = 強(qiáng)大 + 笨拙
計(jì)算機(jī)非常強(qiáng)大,能夠迅速搜索大量數(shù)據(jù)。計(jì)算機(jī)每秒可以執(zhí)行數(shù)十億次操作,其中每個(gè)操作都非常簡(jiǎn)單。
計(jì)算機(jī)也非常笨拙和脆弱。它們所做的操作十分古板、簡(jiǎn)單和機(jī)械化。計(jì)算機(jī)缺少任何類似真實(shí)洞察力的事情...它并不像電影中的HAL 9000。如果不出意外,你不應(yīng)被計(jì)算機(jī)嚇到,就像它擁有某種大腦一樣。它在背后非常機(jī)械化。
程序是一個(gè)人使用他的真實(shí)洞察力來(lái)構(gòu)建出的一些實(shí)用的東西,它由這些簡(jiǎn)單的小操作所組成。
—Francisco Cai & Nick Parlante, 斯坦福 CS101
在你實(shí)驗(yàn)Python解釋器的時(shí)候,你會(huì)馬上意識(shí)到計(jì)算機(jī)的古板:即使最小的拼寫和格式修改都會(huì)導(dǎo)致非預(yù)期的輸出和錯(cuò)誤。
學(xué)習(xí)解釋錯(cuò)誤和診斷非預(yù)期錯(cuò)誤的原因叫做調(diào)試(debugging)。它的一些指導(dǎo)原則是:
逐步測(cè)試:每個(gè)寫好的程序都由小型的組件模塊組成,這些組件可以獨(dú)立測(cè)試。盡快測(cè)試你寫好的任何東西來(lái)及早捕獲錯(cuò)誤,并且從你的組件中獲得自信。
隔離錯(cuò)誤:復(fù)雜程序的輸出、表達(dá)式、或語(yǔ)句中的錯(cuò)誤,通常可以歸于特定的組件模塊。當(dāng)嘗試診斷問(wèn)題時(shí),在你能夠嘗試修正錯(cuò)誤之前,一定要將它跟蹤到最小的代碼片段。
檢查假設(shè):解釋器將你的指令執(zhí)行為文字 -- 不多也不少。當(dāng)一些代碼不匹配程序員所相信的(或所假設(shè)的)行為,它們的輸出就會(huì)是非預(yù)期的。了解你的假設(shè),之后專注于驗(yàn)證你的假設(shè)是否整理來(lái)調(diào)試。
詢問(wèn)他人:你并不是一個(gè)人!如果你不理解某個(gè)錯(cuò)誤信息,可以詢問(wèn)朋友、導(dǎo)師或者搜索引擎。如果你隔離了一個(gè)錯(cuò)誤,但是不知道如何改正,可以讓其它人來(lái)看一看。在小組問(wèn)題解決中,會(huì)分享一大堆有價(jià)值的編程知識(shí)。
逐步測(cè)試、模塊化設(shè)計(jì)、明確假設(shè)和團(tuán)隊(duì)作業(yè)是貫穿這門課的主題。但愿它們也能夠一直伴隨你的計(jì)算機(jī)科學(xué)生涯。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38105.html
摘要:為通用語(yǔ)言設(shè)計(jì)解釋器的想法可能令人畏懼。但是,典型的解釋器擁有簡(jiǎn)潔的通用結(jié)構(gòu)兩個(gè)可變的遞歸函數(shù),第一個(gè)求解環(huán)境中的表達(dá)式,第二個(gè)在參數(shù)上調(diào)用函數(shù)。這一章接下來(lái)的兩節(jié)專注于遞歸函數(shù)和數(shù)據(jù)結(jié)構(gòu),它們是理解解釋器設(shè)計(jì)的基礎(chǔ)。 3.1 引言 來(lái)源:3.1 Introduction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 第一章和第二章描述了編程的兩個(gè)基本元素:數(shù)據(jù)和函數(shù)之間的...
摘要:對(duì)象表示信息,但是同時(shí)和它們所表示的抽象概念行為一致。通過(guò)綁定行為和信息,對(duì)象提供了可靠獨(dú)立的日期抽象。名稱來(lái)源于實(shí)數(shù)在中表示的方式浮點(diǎn)表示。另一方面,對(duì)象可以表示很大范圍內(nèi)的分?jǐn)?shù),但是不能表示所有有理數(shù)。 2.1 引言 來(lái)源:2.1 Introduction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 在第一章中,我們專注于計(jì)算過(guò)程,以及程序設(shè)計(jì)中函數(shù)的作用。我們看到了...
摘要:第四章分布式和并行計(jì)算來(lái)源譯者飛龍協(xié)議引言目前為止,我們專注于如何創(chuàng)建解釋和執(zhí)行程序。一個(gè)交互的例子就是在線閱讀紐約時(shí)報(bào)。當(dāng)上的服務(wù)器與瀏覽器客戶端比如通信時(shí),它的任務(wù)就是發(fā)送回來(lái)紐約時(shí)報(bào)主頁(yè)的。消息有三個(gè)必要部分發(fā)送者接收者和內(nèi)容。 第四章 分布式和并行計(jì)算 來(lái)源:Chapter 4: Distributed and Parallel Computing 譯者:飛龍 協(xié)議:CC B...
摘要:實(shí)踐指南函數(shù)的藝術(shù)來(lái)源譯者飛龍協(xié)議函數(shù)是所有程序的要素,無(wú)論規(guī)模大小,并且在編程語(yǔ)言中作為我們表達(dá)計(jì)算過(guò)程的主要媒介。目前為止,我們討論了函數(shù)的形式特性,以及它們?nèi)绾问褂谩5谝恍忻枋龊瘮?shù)的任務(wù)。 1.4 實(shí)踐指南:函數(shù)的藝術(shù) 來(lái)源:1.4 Practical Guidance: The Art of the Function 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 函...
摘要:的最常見(jiàn)的作用是構(gòu)造異常實(shí)例并拋出它。子句組只在執(zhí)行過(guò)程中的異常產(chǎn)生時(shí)執(zhí)行。每個(gè)子句指定了需要處理的異常的特定類。將強(qiáng)制轉(zhuǎn)為字符串會(huì)得到由返回的人類可讀的字符串。 3.4 異常 來(lái)源:3.4 Exceptions 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 程序員必須總是留意程序中可能出現(xiàn)的錯(cuò)誤。例子數(shù)不勝數(shù):一個(gè)函數(shù)可能不會(huì)收到它預(yù)期的信息,必需的資源可能會(huì)丟失,或者網(wǎng)...
閱讀 3999·2021-11-18 13:22
閱讀 1824·2021-11-17 09:33
閱讀 2882·2021-09-26 09:46
閱讀 1216·2021-08-21 14:11
閱讀 2894·2019-08-30 15:53
閱讀 2711·2019-08-30 15:52
閱讀 1898·2019-08-30 10:52
閱讀 1522·2019-08-29 15:30