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

1.3 知識準備

1.3.1 Python基礎

Python是一種解釋型、面向對象的高級程序設計語言,功能強大,具有很多區(qū)別于其他語言的個性化特點。在Python中,一切皆是對象。

1.Python簡介

Python語法簡單,易于閱讀和理解,便于快速地構建項目并快速地進行改進。Python用途廣泛,對初學者友好,在入門級編程人員中很受歡迎。Python是開源的,有豐富的、不斷增長的第三方模塊來擴展其功能。Python還擁有一個龐大而活躍的社區(qū),在Python的模塊和庫方面做出了貢獻,并為其他應用者提供了有用的資源。

目前(截至2022年9月)Python的最新版本為3.10.7。在開始學習使用Python之前,選擇一個合適的集成開發(fā)環(huán)境(Integrated Development Environment,IDE),有利于我們快速上手Python,在學習中起到事半功倍的效果。Python的集成開發(fā)環(huán)境有很多,這里列出本書用到的集成開發(fā)環(huán)境。

(1)IDLE。IDLE是Python自帶的、默認的、入門級集成開發(fā)環(huán)境,包含交互式和文件式兩種模式。在交互式環(huán)境下可以編寫一行或者多行語句并且立刻看到結果。在文件式環(huán)境下可以像其他文本工具類一樣編寫語句。通常我們只用它進行教學以及展示、測試和調試代碼,不建議使用它進行實際的開發(fā)工作。

(2)PyCharm。PyCharm是唯一一款專門面向Python的全功能集成開發(fā)環(huán)境。PyCharm在所有的集成類工具中相對簡單且集成度較高,使用人數最多,適合編寫較大、較復雜的程序。其代碼自動補全功能在同類產品中幾乎是最優(yōu)秀的。

(3)Jupyter Notebook。Jupyter Notebook是一個開源的Web應用程序,非常方便開發(fā)者創(chuàng)建和共享代碼文檔。對于Python學習者而言,Jupyter Notebook提供了一個非常友好的環(huán)境,允許把代碼寫入獨立的單元中,可單獨執(zhí)行,無須從頭開始執(zhí)行。

2.基礎語法

基礎語法是編程語言最基礎的部分,不同的編程語言,如C語言、C++、Java、Python等,它們在基礎語法的細節(jié)上都不盡相同,需要區(qū)別對待。

(1)標識符

標識符就是變量、常量、函數、類等對象使用的名稱。需要注意的是,Python中的標識符是嚴格區(qū)分字母大小寫的。標識符的第一個字符必須是字母表中的字母或下畫線“_”,其他部分由字母、數字和下畫線組成。標識符不能與Python的關鍵字和內置函數的名稱相同。

(2)關鍵字

關鍵字也稱為保留字,是Python官方確定的語法功能的專用標識符,不能用作任何自定義標識符。關鍵字只包含小寫字母。Python的標準庫提供了一個keyword模塊,可以輸出當前版本的所有關鍵字。

(3)注釋

程序中不僅有代碼,還有很多注釋。注釋有說明性質的,也有幫助性質的。它們在代碼執(zhí)行過程中相當于不存在,但在代碼維護、解釋、測試等方面發(fā)揮著不可或缺的重要作用。

在Python中,以符號“#”為單行注釋的開始,從它往后到本行末尾的內容都是注釋內容。如果想注釋多行語句,則只能在每行的開頭加上符號“#”。

很多時候,在一些Python腳本文件的開頭都能看到以“#”開頭的兩行代碼,它們不是注釋,而是一些設定。這兩行代碼的特點是位置在文件的頂行、頂左,沒有空格和空行。

第一行用于指定運行腳本的Python解釋器,為Linux專用,Windows中不需要使用。第二行用于指定代碼的編碼方式。Python 3全面支持Unicode編碼,默認采用UTF-8編碼,這里可以不需要。但在Python 2中,通常都需要這一行。

(4)語句縮進

Python最具特色的語法格式就是使用縮進來表示代碼塊,不像其他編程語言使用花括號或其他符號。相同層次的語句具有相同的縮進。

Python縮進規(guī)則是指在定義類、函數、流程控制語句、異常處理語句等時,行尾的冒號和下一行的縮進表示下一個代碼塊的開始,而縮進的結束表示代碼塊的結束。

Python官方的代碼規(guī)范PEP 8建議使用4個空格作為縮進。在PyCharm中,如果縮進的空格數不一致,則會拋出名為“IndentationError”的異常。

(5)多行語句

Python中,通常一行就是一條語句,一條語句通常也不會超過一行。但Python并沒有從語法層面完全禁止在一行中使用多條語句,可以使用分號使多條語句在一行,舉例如下。

上面這一行包含3條語句,用分號分隔。但是強烈建議不要這么做,因為這樣會導致代碼閱讀困難、維護耗時,且容易出錯。

但當一條語句實在太長時,也是可以占用多行的,可以使用反斜線來實現多行語句。例如,以下字符串

可以通過使用反斜線來實現一條語句的多行表示:

方括號、花括號或圓括號中的多行語句不需要使用反斜線,直接按Enter鍵換行即可。下面的函數參數過多,將所有參數放在一行會導致閱讀困難,可以使用多行表示以便閱讀。

PEP 8建議每一行的字符不超過79個。

3.數據類型

Python是一門弱類型語言,變量使用前無須聲明,變量名可以看作對象的引用。

Python中有許多內置的基本數據類型,分為數字(number)、字符串(string)、列表(list)、元組(tuple)、字典(dict)、集合(set)以及一些不太常用的數據類型,如字節(jié)串(byte)等。這些數據類型可以分成以下幾種類型。

(1)可變類型:列表、字典和集合。

(2)不可變類型:數字、字符串和元組。

(3)序列類型:字符串、列表、元組和字典。

(4)非序列類型:集合。

4.流程控制

流程控制指的是代碼運行邏輯、分支走向、循環(huán)控制,是體現程序執(zhí)行順序的操作。流程控制結構一般分為順序結構、選擇結構和循環(huán)結構。

(1)順序結構是指程序逐行執(zhí)行,所有語句都按照它們在文件中寫入的順序執(zhí)行。

(2)選擇結構也稱分支結構,是指程序有選擇地執(zhí)行代碼,可以跳過沒用的代碼,只執(zhí)行有用的代碼。通常有如下兩種選擇結構。

●條件判斷:if/elif/else。

●異常處理:try/except。

(3)循環(huán)結構是指程序不斷地重復執(zhí)行同一段代碼。通常有如下兩種循環(huán)結構。

●for循環(huán)。

●while循環(huán)。

5.定義函數

編寫代碼時,很多地方可能需要實現同樣的功能,造成同樣的一段代碼重復出現。重復出現的代碼可能只是一個包含3~5行的代碼塊,也可能是一個包含更多行的代碼序列。當代碼需要更新時,必須更新所有重復出現的代碼,且容易出錯。

此時,可以創(chuàng)建一個函數,包含一段重復出現的代碼。每次需要重復使用這段代碼時,只需調用函數即可。函數不僅允許命名代碼塊,還允許通過參數為函數傳遞不同的數據,并根據參數獲得不同的結果。

函數是具有名稱、可以根據需要多次調用的代碼塊。函數允許我們將常用的代碼以固定的格式封裝成一個獨立的模塊,只要知道這個模塊的名稱就可以重復使用它。

(1)函數定義

定義函數使用關鍵字def,def后跟函數名和圓括號,在圓括號內定義函數接收的參數,也可以不定義參數。圓括號后是冒號,函數體(函數的代碼塊)以冒號開始,并且統(tǒng)一縮進。使用return語句結束函數,默認返回None。return語句依然在函數體內部,不能回退縮進。直到函數的所有代碼寫完,才回退縮進,表示函數結束。

函數定義語法如下:

下面定義一個名為configure_intf的函數,函數有3個參數:intf_name、ip、mask。

注意事項如下。

●定義函數時的參數稱為形式參數(簡稱形參)。

●當程序執(zhí)行到定義函數的這段代碼時,只是將這段代碼載入內存,函數體中的代碼只有在函數被調用時才執(zhí)行。這類似網絡設備中的訪問控制列表(Access Control List,ACL)。在網絡設備中創(chuàng)建的ACL,在應用之前,其不執(zhí)行任何操作。

●調用函數時必須傳入實際參數(簡稱實參)。

(2)函數調用

函數只有在被調用時才會被執(zhí)行。要調用函數,必須使用函數名后跟圓括號的方式。調用時要根據函數的定義,提供相應個數和類型的參數,每個參數之間用逗號分隔。

下面調用函數configure_intf():

此時,函數被調用,執(zhí)行函數體代碼,輸出如下:

當前的函數將執(zhí)行結果輸出到標準輸出,不能保存到變量中。因為在定義函數時沒有定義返回值,默認返回None。

(3)函數返回值

在Python中,用def語句創(chuàng)建函數時,可以用return語句指定該函數返回的值,返回值可以是任意類型的。需要注意的是,return語句在同一個函數中可以有多條,但只要有一條得到執(zhí)行,就會直接結束函數的執(zhí)行。

下面的代碼改造了configure_intf(),將函數的輸出通過return語句返回:

函數可以返回多個值。在這種情況下,它們由return后面的逗號分隔。實際上,此時函數將返回元組。例如:

也可以按照函數返回幾個值就定義幾個變量的方式來接收相應的返回值。

6.異常處理

程序在運行過程中,總會遇到各種各樣的錯誤。有些錯誤是編寫代碼時造成的,有些錯誤是不可預料,但錯誤完全有可能發(fā)生的,如文件不存在、網絡擁塞、系統(tǒng)錯誤等。

(1)異常

在Python中,把這些導致程序在運行過程中出現異常中斷或退出的錯誤稱為異常(Exception)。

一個程序發(fā)生異常,代表該程序在執(zhí)行時出現了非正常的情況,無法再執(zhí)行下去。默認情況下,程序是要終止的。如果要避免程序退出,則可以使用捕獲異常的方式獲取異常的名稱,再通過其他的邏輯代碼讓程序繼續(xù)運行。這種根據異常做出的邏輯處理稱為異常處理。

Python定義了以下3種異常處理結構。

●try/except結構;

●try/except/else結構;

●try/except/finally結構。

(2)try/except結構

try/except結構的執(zhí)行流程如下。

●首先執(zhí)行try塊,如果程序執(zhí)行過程中出現異常,則系統(tǒng)會自動生成一個異常類型,并將該異常提交給Python解釋器,此過程被稱為捕獲異常。

●Python解釋器收到異常時,會尋找能處理該異常的except塊。如果找到合適的except塊,就把該異常交給該except塊處理,此過程被稱為處理異常。如果Python解釋器找不到能處理異常的except塊,則程序終止運行,Python解釋器也將退出。

下面的代碼使用了try/except結構:

(3)try/except/else結構

在try/except結構的基礎上,Python異常處理機制還提供了增加一個else塊的結構,即try/except/else結構。

try/except/else結構的執(zhí)行流程如下。

●當try塊沒有捕獲到任何異常時,才會執(zhí)行使用else包裹的代碼。

●如果try塊捕獲到異常,則只會執(zhí)行except塊中的代碼處理異常,不會執(zhí)行else包裹的代碼。

下面的代碼使用了try/except/else結構:

(4)try/except/finally結構

Python異常處理機制還提供了增加一個finally塊的結構,即try/except/finally結構,在整個異常處理過程中,無論try塊是否捕獲到異常,最終都要進入finally塊,并執(zhí)行其中的代碼。

下面的代碼使用了try/except/finally結構:

主站蜘蛛池模板: 蒙山县| 高邑县| 阳江市| 仪征市| 论坛| 清河县| 敦煌市| 商南县| 沙河市| 天峻县| 石屏县| 清涧县| 资源县| 和田市| 肥乡县| 开江县| 萝北县| 中方县| 邳州市| 双鸭山市| 扎囊县| 黎川县| 云龙县| 闸北区| 平邑县| 麻江县| 嵩明县| 丹凤县| 罗山县| 淳化县| 大关县| 时尚| 西城区| 洛宁县| 全南县| 深泽县| 万荣县| 丰镇市| 清徐县| 开阳县| 锦州市|