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

2.3 Python基本語法元素

Python基本語法包括程序層次結構、代碼注釋、換行與并行、變量與保留字、字符串、程序分支語句、賦值語句和數據輸入與輸出等元素。下面依次介紹一下這幾種元素,學習它們的使用方法和在使用過程中應該要注意哪些。

2.3.1 程序層次結構

習慣了C語言、C++之類的程序結構,初學Python者經常會被莫名奇妙的縮進錯誤給整迷糊,Python必須使用正確的縮進格式。在Python里不能用大括號“{ }”來表示語句塊,也不能用開始或結束標志符來表示,而是靠縮進來表示程序的層次結構,“縮進”不僅是為了讓程序結構好看。

空白(縮進)在Python中是非常重要的。縮進是指每一行代碼前端的空白區域,用來識別代碼之間的包含和層次關系。這意味著同一層次的語句必須有相同的縮進。每一組這樣的語句稱為一個塊。借用“縮進”的方式會使程序層次結構非常清晰,便于代碼閱讀。

在Python代碼編寫過程中,縮進可以通過按Tab鍵或使用多個空格(通常是4個空格)來實現。例如如下的一段Python程序代碼。

【例2-3】程序層次結構。

在該段代碼中可以發現,除第1、2、7行代碼外都存在縮進,不需要縮進的代碼頂行編寫,不留空白(縮進)。其中,第3行代碼采用單層代碼縮進,第4行用到了多層代碼縮進(嵌套縮進)。通過縮進可以很清楚地分清哪個if與else是相匹配的條件判斷。通常來說,在代碼中判斷、循環、函數以及類等語法形式使用縮進形式來標識代碼間的包含關系,能更清晰地傳達語義。但是,如果是非常簡單的語句不表達包含關系,就不需要使用縮進了。

值得注意的是,處于同一級別的代碼縮進量和縮進的符號(Tab鍵或空格)要保持一致,這樣才能保持嵌套的層次關系清晰正確。否則,由于縮進的方式不一致可能導致嵌套錯誤,甚至會影響程序的正確運行。另外,在Python的代碼縮進中最好采用空格的方式,每一層向右縮進4個空格,通常不建議采用Tab鍵,更不能兩種混合使用。

另外,現在有一些Python輔助開發工具可以自定義,按一次Tab鍵生成4個空格的代碼縮進。還有一些工具可以自動實現代碼縮進,這些都可以給程序編寫帶來極大的方便。

2.3.2 代碼注釋

在大多數編程語言中,注釋都是一項很有用處的功能。注釋是程序員在程序代碼中添加的一行或多行說明信息,在編程中是很重要的部分。由于注釋不是程序的組成部分,所以注釋是不被計算機執行的。但是可以讓程序代碼更易于被其他程序員閱讀,它能告訴你這段代碼是干什么用的,提示代碼的可讀性。由于注釋不被程序所執行,可以借用注釋來刪除或跳過一部分暫時不需要執行的代碼。例如,在如下代碼中,第1行就是一個注釋,會被編譯或者解釋器略去,是不被計算機執行的。

【例2-4】代碼注釋。

Python語言有兩種使用注釋的方法:單行注釋和多行注釋。單行注釋是在每一行的前面輸入“#”號,“#”號后面的內容都會被Python解釋器忽略,如下所示。

多行注釋是使用三個單引號(''')來添加多行注釋,如下所示。

1. 注釋的意義

在程序中編寫注釋的目的是表明代碼要做什么,以及是如何做。在項目開發期間,程序員可能對程序如何工作及原理了如指掌,但過一段時間后,部分細節問題可能會被遺忘。當然沒注釋的程序是可以花費時間重新研究代碼來確定各個部分的工作原理,這勢必會浪費很多時間和精力。但如果通過編寫注釋,以清晰的自然描述語言對程序解決方案進行闡述,可節省很多時間和精力。

現在編寫項目程序,大多是團隊合作,可能是跨部門程序員也可能是跨公司的程序員,甚至是跨國的程序員在一起開發一個項目。清晰規范的程序重要,清晰簡潔的程序注釋也同樣重要,這樣才能被別的程序員看懂程序,程序才能相互更好地融合在一起,更利于團隊項目的開發和合作。

要想成為專業的程序員,或與其他程序員有良好的合作,就必須編寫有意義的注釋,訓練有素的程序員,都希望代碼中包含注釋,因此在程序中添加描述性的語言注釋,是新手最值得養成的習慣和素養之一。

2. 注釋的主要用途

程序注釋在程序開發中的用途主要表現在如下幾個方面。

(1)標注軟件作者及版權信息。

在每個程序源代碼文件的開始前增加注釋,如標記、編寫代碼的作者、日期、用途、版權聲明等信息。根據注釋內容可采用單行或多行注釋。

(2)注釋代碼原理和用途。

在程序關鍵代碼附近增加注釋,解釋核心代碼的用處、原理及注意事項,增加程序的可讀性。由于程序本身已經表達了功能意圖,為了不影響程序閱讀連貫性,程序中的注釋一般采用單行注釋,標記在關鍵行與關鍵代碼同行。對于一段關鍵代碼,可以在附近選擇一個多行注釋,或者多個單行注釋,給出代碼設計原理等信息。

(3)輔助程序調試。

在調試程序時,可以通過單行或多行注釋,臨時去掉一行或多行與當前調試無關的代碼,輔助程序員找到程序發生問題的可能位置。

2.3.3 換行與并行

在Python程序編寫過程中,有時會遇到兩行代碼放在同一行更易懂或者一行中過長的代碼為了結構清晰易懂不適合放到同一行中。下面將探討在Python中如何處理代碼換行與并行的問題。

1. 代碼換行

在Python編程中一般是一行寫完所有代碼,如果遇到一行寫不完需要換行的情況,也允許采用代碼換行的方式將一行代碼分成多行編寫。有如下4種方法供選擇。

【例2-5】代碼換行。

(1)在該行代碼末尾加上續行符“\”。

(2)語句中包含()、{}、[]時分行不需要加換行符。

(3)采用三個單引號“'''”。

(4)采用三個雙引號“"""”。

2. 代碼并行

在Python代碼縮進語句塊中如果只有一條語句,將下句代碼直接寫在“:”語句后面也是正確的。

【例2-6】代碼并行。

在上述程序代碼的第03行和08行代碼是不被允許并行到上行代碼“:”語句后面的。因為第03行和08行代碼后還包含一個判斷語句塊,不是獨立的一條語句。其他代碼并行后結果如下:

在Python代碼中除了可以將“:”語句單獨一條語句并行,也可以將“;”后的語句進行并行,并支持連續的并行。

在上述程序代碼中的第02行代碼允許并行到上行代碼“;”語句的后面。并行結果如下:

在上述程序代碼中的第02行也允許并行到上行代碼“;”語句的后面。并行結果如下:

注意:在C、Java、PHP等語言的每一條語句最后加個分號,是語法要求。但是對于Python語言,分號是可加可不加的,因為Python是靠換行來區分代碼語句的,這里建議最好還是不加分號。

2.3.4 變量與保留字

在Python程序中是通過“變量”來存儲和標識具體數據值的,數據的調用和操作是通過變量的名稱。這就需要給程序“變量”元素關聯一個標識符(命名),并保證其唯一性。在Python中對“變量”命名時,需要遵守一些命名規則。違反這些規則將可能引發程序錯誤。請牢記下述有關變量命名的規則。

(1)變量名只允許包含字母(a~z, A~Z)、數字和下畫線。變量名可以以字母或下畫線開頭,但第一個字符不能是數字。例如,可將變量命名為username或者userName2,但不能將其命名為2userName。

(2)變量名不允許包含空格,但可使用下畫線來分隔其中的單詞。例如,變量名命名為user_name是可行的,但命名為user name是不被允許的,會引發錯誤。

(3)在Python程序中對大小寫是敏感的。例如,username和userName是不同的變量名。

(4)變量命名應既簡短又具有描述性。例如,name比n好,user_name比u_n好。

(5)慎用小寫字母l和大寫字母O,因為它們可能被人錯看成數字1和0。另外,字母p的大小寫也應慎用,不易區分。

(6)不要使用Python程序已經保留用于特殊用途的Python關鍵字和函數名作為變量名,如print、if、for(如下所示)。

“保留字”指在高級程序語言中已經被定義過的字,不允許使用者再將這些字作為變量名或常量名使用。

注意:編寫Python程序過程中,建議使用小寫的Python變量名。在變量名中使用大寫字母雖然不會導致錯誤,但避免使用大寫字母,這樣可以更利于程序代碼的閱讀。

2.3.5 字符串

字符串表示的是文本,通常是指要展示給別人的或者是想要從程序里“輸出”的一小段字符。在Python中可以對文本通過雙引號("")或者單引號('')標注來識別出字符串來。例如:

在本例中寫的是userage = '18',所以userage就是一個字符串。但是如果寫的是userage = 18(沒有引號),那么userage就不是一個字符串了,而變成了一個整數。

另外,在Python中,可以使用字符串操作符“+”(加號)實現兩個字符串的連接操作。例如,字符串"python"+" is good!"和"python"+" is good!"與'python is good'所表達的字符串的值是相同的。

2.3.6 程序分支語句

在Python中采用if-elif-else描述多分支結構,是對上級if判斷條件語句為真值情況的二次判斷,甚至多次判斷。語句格式如下:

在2.1節的程序范例中,首先程序對所輸入的數字進行與2整除結果判斷(if num%2==0),如果條件滿足再進行與5整除結果判斷(if num%5==0),最后程序根據這兩項判斷條件是否成立(為真)的情況,給出所輸入數字被2或5整除情況的字符串信息。

2.3.7 賦值語句

在前面的程序中運用了一條num=int(input("輸入一個數字:"))語句,其中的“=”在Python中表示“賦值”,包含“=”的語句在Python中稱為賦值語句。“=”是一個賦值符號,表示將“=”右邊的值賦給“=”左側的變量,在本語句中表示將“=”右側獲取到的輸入數字賦給左側的num變量。“=”賦值符號和數學中的“=”號的含義是不一樣的。

另外,在Python中還有一種是同步賦值語句,該語句可以同時對多個變量賦值(先運算右側N個表達式,然后同時將表達式結果賦給左側)語法如下:

例如:交換變量x和y

如果采用單個賦值,需要3行語句:

在本例中即通過一個臨時變量z先緩存下x的原始值,然后將y值(交換)賦給x,最后將x的原始值再通過z(交換)賦值給y,完成變量x和y值的交換操作。

如果采用同步賦值語句的方式,不需要借用臨時變量緩存數值,僅需要一行代碼即可:

同步賦值語句可以讓賦值過程變得更便捷,減少變量的使用,使賦值語句更簡潔易懂,提高程序的可讀性。

另外,在Python程序中,賦值語句x = y和y = x的含義是不同的。例如:

注意:上述代碼需要一行一行地輸入和執行,否則會報語法錯誤。

在本例中,雖然x的初始值是3(在第1行中賦值的),但在第03行x=y的賦值語句中又把y的值(9)賦值給了x,現在x的值已經由最初的3變成了9。y的值沒有被重新賦值保持不變。所以程序執行輸出的數值均為9,如下所示。

接下來,將范例中第03行賦值語句修改為y = x。范例如下:

在數學運算中通常x = y和y = x有著相同的含義,然而在程序中它們的含義卻發生了變化。在第03行通過y=x的賦值語句中把x的值(3)賦值給了y,現在y的值已經由最初的9變成了3。x的值沒有被重新賦值保持不變。所以程序執行輸出的數值均為3,如下所示。

2.3.8 數據輸入與輸出

在Python編程中是通過Python內置的input()函數和print()函數實現數據的輸入讀取和輸出顯示信息的。下面將學習Python數據的輸入與輸出。

1. input()函數

input()函數可以讓程序暫停運行,等待用戶輸入數據信息。程序在獲取用戶輸入的信息后,Python將其存儲在一個變量中,以方便后面程序的使用。

在2.1節的程序范例中的第01行就用到了input()函數。

input()函數接受一個參數,即要向用戶顯示的提示或說明,讓用戶知道該做什么。在這個范例中,Python運行到第01行代碼時,用戶將看到提示“輸入一個數字:”。程序等待用戶輸入數字,當用戶完成數字的輸入并按Enter鍵后程序才繼續運行。用戶所輸入數字存儲在變量num中。

input()輸入函數的語法如下:

在Python 3.X中,input()函數獲得的用戶輸入均以字符串形式保存在變量中,參見如下范例代碼。

【例2-7】input()輸入函數。

無論用戶輸入的是數字還是字符,input()函數都統一按照字符串的類型輸出顯示。在例2-7的第06行輸入2018時,input()函數以字符的形式輸出。

2. print()函數

print()函數向用戶或者屏幕上輸出指定的字符信息。在print()函數的括號中加上字符串,就可以向屏幕上輸出指定的文字。例如輸出“hello,world”,用代碼實現如下。

print()函數也可以接受多個字符串,用逗號“,”隔開,就可以連成一串輸出:

print()會依次打印輸出每個字符串,遇到逗號“,”會輸出一個空格,因此,輸出的字符串是就是這樣拼起來的。

print()輸出函數的語法如下:

  •  參數sep是實現分隔符,例如多個參數輸出時想要輸出中間的分隔字符;
  •  參數end是輸出結束時的字符,默認是換行符\n;
  •  參數file是定義流輸出的文件,可以是標準的系統輸出sys.stdout,也可以重定義為別的文件;
  •  參數flush是判斷是否立即把內容輸出到流文件,不做緩存(這里是sys.stdout,也就是默認的顯示器)。

print()輸出函數中的sep、end、file、flush參數是4個可選參數。具體應用方法如下。

(1)sep參數:在輸出字符串之間插入指定字符串,默認是空格,范例代碼如下。

【例2-8】print()輸出函數中的sep參數。

(2)end參數:在print輸出語句的結尾加上指定字符串,默認是換行(\n),范例代碼如下。

【例2-9】print()輸出函數中的end參數。

注意:print默認是換行,即輸出語句后自動切換到下一行,對于Python 3.X來說,如果要實現輸出不換行的功能,可以設置end=" "(Python 2可以在print語句之后加“,”實現不換行的功能)。

(3)file參數:指定文本將要發送到的文件、標準流或者其他類似文件的對象,默認是sys.stdout,范例代碼如下:

【例2-10】print()輸出函數中的file參數。

在本例中,file=open('print.txt','a')設置了輸出文件路徑,'a'設置了打開文件的方式是添加模式,所以字符串會加在文件末尾,不會重寫文件。其中,sep='-'參數設置了字符寫入時的分隔符(-);end=';\n'參數設置了字符寫完后的結尾符號(;)及換行(\n)。另外,執行該函數會在Python軟件根目錄中新建一個print.txt文本文件用于寫入本例指定文本,如圖2-2所示。

(4)flush參數:flush參數值為True或者False,默認為False,表示是否立刻將輸出語句輸入到參數file指向的對象中(默認是sys.stdout),范例代碼如下。

【例2-11】print()輸出函數中的flush參數。

可以看到print.txt文件這時為空,只有執行f.close()之后才將內容寫進文件,如圖2-3所示。

圖2-2 print.txt文本文件

圖2-3 print.txt空文本文件

在這里將file=f參數值修改為True,則立刻就可以看到指定文件的輸出函數內容,如圖2-4所示。

圖2-4 輸出函數立即寫入print.txt文件

flush參數的功能在客戶端腳本中幾乎用不上,多用于服務器端。例如,在線Web即時聊天頁面會實時顯示聊天的內容,其實后臺是在一直向服務器請求數據的,正常情況下是請求完畢之后才會輸出相應的請求內容,但是因為是即時聊天,就需要一有信息響應就立即返回,在這里flush也就起作用了。

主站蜘蛛池模板: 泾阳县| 分宜县| 巴青县| 固镇县| 泰和县| 嘉兴市| 沂水县| 香格里拉县| 乌兰察布市| 山阳县| 二手房| 广平县| 北宁市| 锦州市| 周至县| 海晏县| 札达县| 中山市| 南宁市| 彰武县| 长武县| 咸丰县| 灵石县| 昌平区| 通渭县| 延川县| 周宁县| 五家渠市| 永泰县| 宜宾市| 朝阳市| 伊川县| 毕节市| 密山市| 赤水市| 温州市| 常德市| 裕民县| 大石桥市| 金寨县| 盘锦市|