摘要:對(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ù)的作用。我們看到了如何使用原始數(shù)據(jù)(數(shù)值)和原始操作(算術(shù)運(yùn)算),如何通過(guò)組合和控制來(lái)形成復(fù)合函數(shù),以及如何通過(guò)給予過(guò)程名稱來(lái)創(chuàng)建函數(shù)抽象。我們也看到了高階函數(shù)通過(guò)操作通用計(jì)算方法來(lái)提升語(yǔ)言的威力。這是編程的本質(zhì)。
這一章會(huì)專注于數(shù)據(jù)。數(shù)據(jù)允許我們通過(guò)使用已經(jīng)獲得的計(jì)算工具,表示和操作與世界有關(guān)的信息。脫離數(shù)據(jù)結(jié)構(gòu)的編程可能會(huì)滿足于探索數(shù)學(xué)特性,但是真實(shí)世界的情況,比如文檔、關(guān)系、城市和氣候模式,都擁有復(fù)雜的結(jié)構(gòu),它最好使用復(fù)合數(shù)據(jù)類型來(lái)表現(xiàn)。歸功于互聯(lián)網(wǎng)的高速發(fā)展,關(guān)于世界的大量結(jié)構(gòu)信息可以免費(fèi)從網(wǎng)上獲得。
2.1.1 對(duì)象隱喻在這門課的開始,我們區(qū)分了函數(shù)和數(shù)據(jù):函數(shù)執(zhí)行操作,而數(shù)據(jù)被操作。當(dāng)我們?cè)跀?shù)據(jù)中包含函數(shù)值時(shí),我們承認(rèn)數(shù)據(jù)也擁有行為。函數(shù)可以像數(shù)據(jù)一樣被操作,但是也可以被調(diào)用來(lái)執(zhí)行計(jì)算。
在這門課中,對(duì)象作為我們對(duì)數(shù)據(jù)值的核心編程隱喻,它同樣擁有行為。對(duì)象表示信息,但是同時(shí)和它們所表示的抽象概念行為一致。對(duì)象如何和其它對(duì)象交互的邏輯,和編碼對(duì)象值的信息綁定在一起。在打印對(duì)象時(shí),它知道如何以字母和數(shù)字把自己拼寫出來(lái)。如果一個(gè)對(duì)象由幾部分組成,它知道如何按照要求展示這些部分。對(duì)象既是信息也是過(guò)程,它們綁定在一起來(lái)展示復(fù)雜事物的屬性、交互和行為。
Python 中所實(shí)現(xiàn)的對(duì)象隱喻具有特定的對(duì)象語(yǔ)法和相關(guān)的術(shù)語(yǔ),我們會(huì)使用示例來(lái)介紹。日期(date)就是一種簡(jiǎn)單對(duì)象。
>>> from datetime import date
date的名字綁定到了一個(gè)類上面。類表示一類對(duì)象。獨(dú)立的日期叫做這個(gè)類的實(shí)例,它們可以通過(guò)像函數(shù)那樣在參數(shù)上調(diào)用這個(gè)類來(lái)構(gòu)造,這些參數(shù)描述了實(shí)例。
>>> today = date(2011, 9, 12)
雖然today從原始數(shù)值中構(gòu)造,它的行為就像日期那樣。例如,將它與另一個(gè)日期相減會(huì)得到時(shí)間差,它可以通過(guò)調(diào)用str來(lái)展示為一行文本:
>>> str(date(2011, 12, 2) - today) "81 days, 0:00:00"
對(duì)象擁有屬性,它們是帶有名字的值,也是對(duì)象的一部分。Python 中,我們使用點(diǎn)運(yùn)算符來(lái)訪問(wèn)對(duì)象屬性:
.
上面的
不像我們之前見過(guò)的名稱,這些屬性名稱在一般的環(huán)境中不可用。反之,屬性名稱是點(diǎn)運(yùn)算符之前的對(duì)象實(shí)例的特定部分。
>>> today.year 2011
對(duì)象也擁有方法,它是值為函數(shù)的屬性。在隱喻上,對(duì)象“知道”如何執(zhí)行這些方法。方法從它們的參數(shù)和對(duì)象中計(jì)算出它們的結(jié)果。例如,today的strftime方法接受一個(gè)指定如何展示日期的參數(shù)(例如%A表示星期幾應(yīng)該以全稱拼寫)。
>>> today.strftime("%A, %B %d") "Monday, September 12"
計(jì)算strftime的返回值需要兩個(gè)輸入:描述輸出格式的字符串,以及綁定到today的日期信息。這個(gè)方法使用日期特定的邏輯來(lái)產(chǎn)生結(jié)果。我們從不會(huì)說(shuō) 2011 年九月十二日是星期一,但是知道一個(gè)人的工作日是日期的一部分。通過(guò)綁定行為和信息,Python 對(duì)象提供了可靠、獨(dú)立的日期抽象。
點(diǎn)運(yùn)算符在 Python 中提供了另一種組合表達(dá)式。點(diǎn)運(yùn)算符擁有定義好的求值過(guò)程。但是,點(diǎn)運(yùn)算符如何求值的精確解釋,要等到我們引入面向?qū)ο缶幊痰耐暾妒?,在幾?jié)之后。
即使我們還不能精確描述對(duì)象如何工作,我們還是可以開始將數(shù)據(jù)看做對(duì)象,因?yàn)?Python 中萬(wàn)物皆對(duì)象。
2.1.2 原始數(shù)據(jù)類型Python 中每個(gè)對(duì)象都擁有一個(gè)類型。type函數(shù)可以讓我們查看對(duì)象的類型。
>>> type(today)
目前為止,我們學(xué)過(guò)的對(duì)象類型只有數(shù)值、函數(shù)、布爾值和現(xiàn)在的日期。我們也碰到了集合和字符串,但是需要更深入地學(xué)習(xí)它們。有許多其它的對(duì)象類型 -- 聲音、圖像、位置、數(shù)據(jù)連接等等 -- 它們的多數(shù)可以通過(guò)組合和抽象的手段來(lái)定義,我們?cè)谶@一章會(huì)研究它們。Python 只有一小部分內(nèi)建于語(yǔ)言的原始或原生數(shù)據(jù)類型。
原始數(shù)據(jù)類型具有以下特性:
原始表達(dá)式可以計(jì)算這些類型的對(duì)象,叫做字面值。
內(nèi)建的函數(shù)、運(yùn)算符和方法可以操作這些對(duì)象。
像我們看到的那樣,數(shù)值是原始類型,數(shù)字字面值求值為數(shù)值,算術(shù)運(yùn)算符操作數(shù)值對(duì)象:
>>> 12 + 3000000000000000000000000 3000000000000000000000012
實(shí)際上,Python 包含了三個(gè)原始數(shù)值類型:整數(shù)(int)、實(shí)數(shù)(float)和復(fù)數(shù)(complex)。
>>> type(2)>>> type(1.5) >>> type(1+1j)
名稱float來(lái)源于實(shí)數(shù)在 Python 中表示的方式:“浮點(diǎn)”表示。雖然數(shù)值表示的細(xì)節(jié)不是這門課的話題,一些int和float對(duì)象的高層差異仍然很重要。特別是,int對(duì)象只能表示整數(shù),但是表示得更精確,不帶有任何近似。另一方面,float對(duì)象可以表示很大范圍內(nèi)的分?jǐn)?shù),但是不能表示所有有理數(shù)。然而,浮點(diǎn)對(duì)象通常用于近似表示實(shí)數(shù)和有理數(shù),舍入到某個(gè)有效數(shù)字的數(shù)值。
擴(kuò)展閱讀。下面的章節(jié)介紹了更多的 Python 原始數(shù)據(jù)類型,專注于它們?cè)趧?chuàng)建實(shí)用數(shù)據(jù)抽象中的作用。Dive Into Python 3 中的原始數(shù)據(jù)類型一章提供了所有 Python 數(shù)據(jù)類型的實(shí)用概覽,以及如何高效使用它們,還包含了許多使用示例和實(shí)踐提示。你現(xiàn)在并不需要閱讀它,但是要考慮將它作為寶貴的參考。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45491.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ù)之間的...
摘要:另一個(gè)賦值語(yǔ)句將名稱關(guān)聯(lián)到出現(xiàn)在莎士比亞劇本中的所有去重詞匯的集合,總計(jì)個(gè)。表達(dá)式是一個(gè)復(fù)合表達(dá)式,計(jì)算出正序或倒序出現(xiàn)的莎士比亞詞匯集合。在意圖上并沒有按照莎士比亞或者回文來(lái)設(shè)計(jì),但是它極大的靈活性讓我們用極少的代碼處理大量文本。 1.1 引言 來(lái)源:1.1 Introduction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 計(jì)算機(jī)科學(xué)是一個(gè)極其寬泛的學(xué)科。全球的分布...
摘要:示例有理數(shù)的算術(shù)有理數(shù)可表示為整數(shù)的比值,并且它組成了實(shí)數(shù)的一個(gè)重要子類。有理數(shù)的值需要兩部分來(lái)描述。這里的重要概念是,通過(guò)將有理數(shù)表示為整數(shù)的比值,我們能夠完全避免近似問(wèn)題。返回有理數(shù)的分子。 2.2 數(shù)據(jù)抽象 來(lái)源:2.2 Data Abstraction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 由于我們希望在程序中表達(dá)世界中的大量事物,我們發(fā)現(xiàn)它們的大多數(shù)都具有...
摘要:程序用于在編程社群的成員之間交流這些想法。在編程中,我們處理兩種元素函數(shù)和數(shù)據(jù)。在中,我們可以使用賦值語(yǔ)句來(lái)建立新的綁定,它包含左邊的名稱和右邊的值。例如,它并不能處理賦值語(yǔ)句。這些圖解的必要部分是函數(shù)的表示。 1.2 編程元素 來(lái)源:1.2 The Elements of Programming 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 編程語(yǔ)言是操作計(jì)算機(jī)來(lái)執(zhí)行任務(wù)...
摘要:序列不是特定的抽象數(shù)據(jù)類型,而是不同類型共有的一組行為。不像抽象數(shù)據(jù)類型,我們并沒有闡述如何構(gòu)造序列。這兩個(gè)選擇器和一個(gè)構(gòu)造器,以及一個(gè)常量共同實(shí)現(xiàn)了抽象數(shù)據(jù)類型的遞歸列表。 2.3 序列 來(lái)源:2.3 Sequences 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 序列是數(shù)據(jù)值的順序容器。不像偶對(duì)只有兩個(gè)元素,序列可以擁有任意(但是有限)個(gè)有序元素。 序列在計(jì)算機(jī)科學(xué)中...
閱讀 3464·2023-04-25 19:39
閱讀 3817·2021-11-18 13:12
閱讀 3642·2021-09-22 15:45
閱讀 2441·2021-09-22 15:32
閱讀 726·2021-09-04 16:40
閱讀 3739·2019-08-30 14:11
閱讀 1893·2019-08-30 13:46
閱讀 1574·2019-08-29 15:43