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