官术网_书友最值得收藏!

1.2 語法規則和基本數據類型

1.2.1 Python語法規則

1.Python標識符

在Python語言中,變量名、函數名、對象名等都是通過標識符來命名的。標識符第一個字符必須是字母表中字母或下劃線“_”,標識符的其他部分由字母、數字和下劃線組成。Python中的標識符是區分大小寫的。在Python 3.X中,非ASCII標識符也是允許的,例如:“data_人數=100”中的“data_人數”為含漢字的標識符。

標識符的命名規則解釋如下:

1)標識符是由字符(A~Z和a~z)、下劃線和數字組成,但第一個字符不能是數字。

2)標識符不能和Python中的保留字相同。

保留字即關鍵字,保留字不能用作常量或變量,也不能用作任何其他標識符名稱。

Python的標準庫提供了一個keyword module,可以輸出當前版本的所有關鍵字,命令和輸出結果如下:

所有保留字見表1-1。

表1-1 Python保留字一覽表

(續)

由于Python是嚴格區分大小寫的,保留字也不例外。所以,if是保留字,但IF就不是保留字。在實際開發中,如果使用Python中的保留字作為標識符,則解釋器會提示“invalid syntax”的錯誤信息。

3)標識符中不能包含空格、@、%以及$等特殊字符。

例如,UserID、name、mode12、user_age等標識符是合法的。

但以下命名的標識符不合法:

4)標識符中的字母是嚴格區分大小寫的,即使兩個同樣的單詞,如果大小寫不一樣,其代表的意義也是完全不同的。

比如說,下面這3個變量,它們彼此之間是相互獨立的個體。

5)以下劃線開頭的標識符有特殊含義,例如:

以單下劃線開頭的標識符(如_width),表示不能直接訪問的類屬性,其無法通過from…import*的方式導入;

以雙下劃線開頭的標識符(如__add)表示類的私有成員;

以雙下劃線作為開頭和結尾的標識符(如__init__),是專用標識符。

因此,除非特定場景需要,應避免使用以下劃線開頭的標識符。

2.縮進和冒號

和其他程序設計語言(如Java、C語言)采用大括號“{}”分隔代碼塊不同,Python采用代碼縮進和冒號(:)來區分代碼塊之間的層次。對于類定義、函數定義、流程控制語句、異常處理語句等,行尾的冒號和下一行的縮進,表示下一個代碼塊的開始,而縮進的結束則表示此代碼塊的結束。

Python中可以使用空格或者<Tab>鍵實現對代碼的縮進,但無論是使用空格,還是使用<Tab>鍵,通常情況下都是采用4個空格長度作為一個縮進量。

Python對代碼的縮進要求非常嚴格,同一個級別代碼塊的縮進量必須一樣,否則解釋器會報SyntaxError異常錯誤。

例如,對代碼做錯誤改動,如圖1-11所示,將位于同一作用域中的兩行代碼,它們的縮進量分別設置為4個空格和3個空格,可以看到,當手動修改了各自的縮進量后,這會導致出現SyntaxError異常錯誤。

圖1-11 縮進規則不符導致的SyntaxError異常錯誤

在IDLE中,默認是以4個空格作為代碼的基本縮進單位。不過,這個值是可以手動改變的,可以通過選擇“Options”菜單中的“Configure IDLE”命令進行修改。

3.Python引號

Python中使用單引號(')、雙引號(")、三引號('"或""")來表示字符串,引號的開始與結束必須是相同種類的引號。其中三引號可以由多行組成,是編寫多行文本的快捷語法。使用示例如下:

三引號常用于文檔字符串,在文件的特定地點,被當作注釋。

4.Python注釋

注釋(Comments)是用來向用戶提示或解釋某些代碼的作用和功能,它可以出現在代碼中的任何位置。Python解釋器在執行代碼時會忽略注釋,不做任何處理。注釋的最大作用是提高程序的可讀性,還可以用來臨時移除無用的代碼。一般情況下,合理的代碼注釋應該占源代碼的1/3左右。

Python支持兩種類型的注釋,分別是單行注釋和多行注釋。

(1)單行注釋

Python使用井號(#)作為單行注釋的符號,語法格式為:

從#標注開始,直到這行結束為止的所有內容都是注釋。

例1-2】說明多行代碼的功能時一般將注釋放在代碼的最上面一行。

運算結果:

例1-3】說明單行代碼的功能時一般將注釋放在代碼的右側。

運算結果:

(2)多行注釋

多行注釋指的是一次性注釋程序中多行的內容(包含一行)。Python使用三個連續的單引號'''或者三個連續的雙引號"""注釋多行內容。

不管是多行注釋還是單行注釋,當注釋符作為字符串的一部分出現時,就不能再將它們視為注釋標記,而應該看作正常代碼的一部分。

例1-4】注釋符作為字符串的一部分。

運算結果:

本例中,第1行和第2行代碼,Python沒有將這里的三個引號看作是多行注釋,而是將它們看作字符串的開始和結束標志;對于第3行代碼,Python也沒有將#看作單行注釋,而是將它看作字符串的一部分。

1.2.2 數據類型概述

Python中主要的內置數據類型有:

1)數值numeric:包括int(整型)、float(浮點數)、bool(布爾型)、complex(復數型)等。

2)序列sequence:包括list(列表)、tuple(元組)、range(范圍)、str(字符串)、bytes(字節串)。

3)映射mappings,主要類型為dict(字典)。

4)集合set。

5)類class。

6)實例instance。

7)例外exception。

1.2.3 變量與常量

1.變量的賦值

任何編程語言都需要處理數據,比如數字、字符、字符串等,用戶可以直接使用數據,也可以將數據保存到變量中,方便以后使用。變量(Variable)可以看成一個小箱子,專門用來“盛裝”程序中的數據。每個變量都擁有獨一無二的名字,通過變量的名字就能找到變量中的數據。從底層看,程序中的數據最終都要放到內存(內存條)中,變量其實就是這塊內存的名字。圖1-12所示是變量age的示意。

圖1-12 變量age的示意

在編程語言中,將數據放入變量的過程稱為賦值(Assignment)。Python使用等號“=”作為賦值運算符,具體語法格式為:

其中,name表示變量名;value表示值,也就是要存儲的數據。

例如,圖1-12中的語句“age=20”就是將整數20賦值給變量age。

在程序的其他地方,age就代表整數20,使用age也就是使用20。

例1-5】變量賦值實例一。

變量的值不是一成不變的,它可以隨時被修改,只要重新賦值即可。另外用戶也不用關心數據的類型,可以將不同類型的數據賦值給同一個變量。

例1-6】變量賦值實例二。

運算結果:

從上述例子中可以看到,除了賦值單個數據,用戶也可以將表達式的運行結果賦值給變量。

和變量相對應的是常量(Constant),它們都是用來“盛裝”數據的小箱子,不同的是,變量保存的數據可以被多次修改,而常量一旦保存某個數據之后就不能修改了。

2.單下劃線雙下劃線開始的特殊變量及特殊方法專用標識

Python用單下劃線和雙下劃線作為變量前綴和后綴指定特殊變量。

(1)_xxx變量名

_xxx被看作是“私有的”變量,在模塊或類外不可以使用。當變量是私有的時候,用_xxx來表示變量是很好的習慣。_xxx變量是不能用“from module import*”導入的。在類中以“單下劃線”開始的成員變量或類屬性稱為保護變量,意思是只有類對象和子類對象自己能訪問到這些變量。

(2)__xxx類中的私有變量名

以“雙下劃線”開始的變量是私有成員變量,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個數據。

(3)__xxx__特殊方法專用標識

以雙下劃線開頭和結尾的代表Python里特殊方法專用標識,如__init__(self,...)代表類的構造函數。這樣的系統特殊方法還有許多,如:

__new__(cls[,...])、__del__(self)、__str__(self)、__lt__(self,other)、__getitem__(self,key)、__len__(self)、__repr__(s)、_cmp__(s,o)、__call__(self,*args)等。

因此要注意避免用下劃線作為一般變量名的開始。

3.常量、內置常量

變量是變化的量,常量則是不變的量。Python中沒有使用語法強制定義常量,有個例外,就是Python有少數的常量存在于內置命名空間中的內置常量,它們是

(1)False

bool類型的假值。給False賦值是非法的并且會引發SyntaxError異常提示。

(2)True

bool類型的真值。給True賦值是非法的并且會引發SyntaxError異常提示。

(3)None

NoneType類型的唯一值。None經常用于表示缺少值,當因為默認參數未傳遞給函數時。給None賦值是非法的并且會引發SyntaxError異常提示。

(4)NotImplemented

NotImplemented是個特殊值,它能被二元特殊方法返回(比如__eq__()、lt()、add()、rsub()等),表明某個類型沒有像其他類型那樣實現這些操作。同樣,它也可以被原地處理(in place)的二元特殊方法返回(比如__imul__()、iand()等)。還有,它的實際值為True。

(5)Ellipsis

Ellipsis是個特殊值,含義即“省略”,與省略號文字字面“...”相同。

(6)__debug__

如果Python沒有以-O選項啟動,則__debug__常量為真值。

(7)quit(code=None)、exit(code=None)

當打印此對象時,會打印出一條消息,例如“Use quit() or Ctrl-D(i.e.EOF) to exit”。當調用此對象時,將使用指定的退出代碼來引發SystemExit。

(8)copyright、credits

打印或調用的對象分別打印版權或作者的文本。

(9)license

當打印此對象時,會打印出一條消息“Type license() to see the full license text”。當調用此對象時,將以分頁形式顯示完整的許可證文本(每次顯示一屏)。

1.2.4 整數類型

1.整數的賦值

整數就是沒有小數部分的數字,Python的整數數據類型包括正整數、0和負整數,取值范圍則是無限的,不管多大或者多小的數字構成的整數,Python都能輕松處理。當所用數值超過計算機自身的計算能力時,Python會自動使用高精度計算。

例1-7】整數的賦值。

運算結果:

從本例中可以看出,num1是一個看起來非常正常的整數,num2是一個極大的數字,num3則是一個很小的數字,Python都能正確輸出這3個變量,不會發生溢出,這說明Python對整數的處理能力非常強大。

2.整數的不同進制

整數可以使用多種進制來表示,常見的有十進制、二進制、八進制和十六進制等形式。

(1)十進制形式

平時常見的整數就是十進制形式,它由0~9共十個數字排列組合而成。需要注意的是,使用十進制形式的整數不能以0作為開頭,除非這個數值本身就是0。

(2)二進制形式

由0和1兩個數字組成,書寫時以0b或0B開頭。例如,0b101對應的十進制數是5。

(3)八進制形式

八進制整數由0~7共八個數字組成,以0o或0O開頭。注意,第一個符號是數字0,第二個符號是大寫或小寫的字母o。

(4)十六進制形式

由0~9十個數字以及A~F(或a~f)六個字母組成,書寫時以0x或0X開頭。

例1-8】二進制、八進制、十六進制整數的使用。

運算結果:

本例的輸出結果都是十進制整數。

3.數字分隔符

為了提高數字的可讀性,允許使用下劃線“_”作為數字(包括整數和小數)的分隔符。通常每隔三個數字添加一個下劃線,類似于英文數字中的逗號。下劃線不會影響數字本身的值。

例1-9】數字分隔符的使用。

運算結果:

1.2.5 小數、浮點數和復數類型

在高級編程語言中,小數通常以浮點數的形式存儲。浮點數和定點數是相對的,小數在存儲過程中,如果小數點發生移動,就稱為浮點數;如果小數點不動,就稱為定點數。Python只有一種小數類型,就是浮點數(float)。

Python中的小數有兩種書寫形式,即十進制形式和指數形式。

(1)十進制形式

平時看到的小數形式都是十進制形式,例如231.5、23.1、0.231。書寫小數時必須包含一個小數點,否則會被Python當作整數處理。

(2)指數形式

Python小數的指數形式的寫法為

其中,a為尾數部分,是一個十進制數;n為指數部分,是一個十進制整數;E或e是固定的字符,用于分割尾數部分和指數部分。整個表達式等價于a×10n

指數形式的小數舉例:

1.8E4=1.8×104,其中1.8是尾數,4是指數。

2.5E-3=2.5×10-3,其中2.5是尾數,-3是指數。

0.3E4=0.3×104,其中0.3是尾數,4是指數。

只要寫成指數形式就是小數,即使它的最終值看起來像一個整數。如12E2等價于1200,但它是一個小數。

例1-10】小數的應用。

運算結果:

從本例中可以看出,print在輸出浮點數時,會根據浮點數的長度和大小適當地舍去一部分數字,或者采用科學計數法。

復數(Complex)是Python的內置類型,直接書寫即可,不依賴于標準庫或者第三方庫。復數由實部(real)和虛部(imag)構成,在Python中,復數的虛部以j或者J作為后綴,具體格式為

其中,a表示實部,b表示虛部。

1.2.6 字符串及其基本操作

字符串(String)就是若干個字符的集合,Python中的字符串必須由雙引號""或者單引號''引用,其雙引號和單引號沒有任何區別,具體格式為:

字符串的內容可以包含字母、標點、特殊符號、中文、日文、韓文等。

下面都是合法的字符串:

1.處理字符串中的引號

當字符串內容中出現引號時,用戶需要進行特殊處理,否則Python會解析出錯,例如:

由于上面字符串中包含了單引號,此時Python會將字符串中的單引號與第一個單引號配對,這樣就會把'I'當成字符串,而后面的m a doctor?。Ь妥兂闪硕嘤嗟膬热?,從而導致語法錯誤。

對于這種情況,一般有兩種處理方案:

(1)對引號進行轉義

在引號前面添加反斜杠“\”就可以對引號進行轉義,讓Python把它作為普通文本對待。

(2)使用不同的引號引用字符串

如果字符串內容中出現了單引號,那么我們可以使用雙引號引用字符串,反之亦然。

例1-11】對引號進行轉義和使用不同的引號引用字符串。

運算結果:

2.字符串的換行

Python不是格式自由的語言,它對程序的換行、縮進都有嚴格的語法要求。要想換行書寫一個比較長的字符串,必須在行尾添加反斜杠“\”。Python也支持表達式添加反斜杠“\”的換行。

3.長字符串

Python長字符串由三個雙引號"""或者三個單引號'''引用,語法格式如下:

在長字符串中放置單引號或者雙引號不會導致解析錯誤。

4.轉義字符

對于ASCII編碼來說,0~31(十進制)范圍內的字符為控制字符,它們都是看不見的,不能在顯示器上顯示,甚至無法從鍵盤輸入,只能用轉義字符的形式來表示。不過直接使用ASCII碼記憶不方便,也不容易理解,所以針對常用的控制字符,Python語言定義了轉義字符方式,見表1-2。

表1-2 Python支持的轉義字符

(續)

轉義字符在書寫形式上由多個字符組成,但Python將它們看作是一個整體,表示一個字符。

此外,轉義字符以“\0”(是數字0,不是字母o)或者“\x”開頭的表示編碼值,前者表示跟八進制形式的編碼值,后者表示跟十六進制形式的編碼值,如\0dd或\xhh等,其中dd表示八進制數字,hh表示十六進制數字。

由于ASCII編碼共收錄了128個字符,\0和\x后面最多只能跟兩位數字,所以八進制形式\0并不能表示所有的ASCII字符,只有十六進制形式\x才能表示所有ASCII字符。

例1-12】使用八進制、十六進制來顯示ASCII碼。

運算結果:

從本例中可以看出,字符C、E、G、I、K、M十六進制形式分別是43、45、47、49、4B、4D;字符1、3、5對應的ASCII碼八進制形式分別是61、63、65;“\t\t”表示2個<Tab>鍵位置。

1.2.7 數據類型轉換

Python已經為我們提供了多種可實現數據類型轉換的函數,見表1-3。需要注意的是,在使用類型轉換函數時,提供給它的數據必須是有意義的。

表1-3 常用數據類型轉換函數

(續)

主站蜘蛛池模板: 克拉玛依市| 洪洞县| 武邑县| 突泉县| 民乐县| 吉林市| 盘山县| 聂荣县| 七台河市| 屯昌县| 鸡泽县| 太保市| 武汉市| 洪洞县| 伊宁市| 耒阳市| 伊川县| 本溪| 黄梅县| 明水县| 怀来县| 监利县| 高青县| 甘肃省| 阜阳市| 宝兴县| 福海县| 霍山县| 鹤峰县| 收藏| 河西区| 福海县| 钟山县| 纳雍县| 百色市| 沿河| 泾川县| 南川市| 襄垣县| 花垣县| 花莲县|