python的类程序的结构_Python程序员学习路径之数据结构篇
原標題:Python程序員學習路徑之數據結構篇
點擊標題下「異步圖書」可快速關注
在計算機科學中,數據結構是一門進階性課程,概念抽象,難度較大。Python語言的語法簡單,交互性強。用Python來講解數據結構等主題,比C語言等實現起來更為容易,更為清晰。
而對于自學Python的朋友往往會遇到數據結構的問題,和所有的現代編程語言一樣,Python也有大量的功能和構造。然而,Python是少數的幾種基本程序要素相當簡單的語言之一。本文將開始介紹使用Python編程的一些基礎知識。
1.1.1 程序和模塊
Python程序包含一個或多個模塊(module)。模塊只不過是Python代碼的一個文件,其中可以包含語句、函數定義和類定義。簡短的Python程序也稱為腳本(),可以包含在一個模塊之中。而較長的或較為復雜的程序,通常包含一個主模塊和一個或多個支持模塊。主模塊包含了程序執行的起點,支持模塊則包含了函數和類的定義。
1.1.2 Python程序示例:猜數字
接下來,我們來看一個完整的Python程序,它是一個和用戶玩猜數字的游戲的程序。計算機要求用戶輸入數值范圍的最小值和最大值。計算機隨后“思考”出在這個范圍之內的一個隨機數,并且重復地要求用戶猜測這個數,直到用戶猜對了。在用戶每次進行猜測之后,計算機都會給出一個提示,并且會在這個過程的最后顯示出總的猜測次數。這個程序包含了幾種類型的Python語句,例如,輸入語句、輸出語句、賦值語句、循環和條件語句,我們將在本章的后面介紹它們。這個程序還包含了一個函數的定義。
如下是該程序的代碼,代碼位于文件numberguess.py之中:
"""Author: Ken Lambert Plays a game of guess the number with the user. """import randomdef main(): """Inputs the bounds of the range of numbers and lets the user guess the computer’s number until the guess is correct.""" smaller = int(input("Enter the smaller number: ")) larger = int(input("Enter the larger number: ")) myNumber = random.randint(smaller, larger) count = 0 while True: count += 1 userNumber = int(input("Enter your guess: ")) if userNumber < myNumber: print("Too small") elif userNumber > myNumber: print("Too large") else: print("You’ve got it in", count, "tries!") breakif __name__ == "__main__": main()
如下是一個用戶和該程序的交互記錄:
Enter the smaller number: 1Enter the larger number: 32Enter your guess: 16Too smallEnter your guess: 24Too largeEnter your guess: 20You’ve got it in 3 tries!
1.1.3 編輯、編譯并運行Python程序
你可以在一個終端窗口中輸入一條命令,來運行整個Python程序。例如,運行本書中給出的大多數示例。要運行numberguess.py文件中包含的程序,在大多數的終端窗口中,只要輸入如下的命令就可以了:
python3 numberguess.py
要創建或編輯Python模塊,嘗試使用Python的IDLE(Integrated DeveLopment Environment,集成開發環境)。要啟動IDLE,在一個終端提示符后輸入idle或idle3,或者單擊其圖標。也可以通過在某個Python源代碼文件(以.py為擴展名的任何文件)上單擊,或者通過在一個文件上點擊鼠標右鍵并選擇“Open or Edit with IDLE”,來啟動IDLE。確保將你的系統設置為在加載這種類型的文件的時候會打開IDLE。
IDLE提供了一個shell窗口,可以交互式地運行Python表達式和語句。使用IDLE,可以在編輯器窗口和shell窗口之間來回切換,以開發和運行完整的程序。IDLE還能夠格式化代碼,并為代碼提供顏色區分。
當你用IDLE打開已有的Python文件的時候,文件會出現在編輯器窗口中,并且shell會在一個單獨的窗口彈出。要運行一個程序,將光標移動到編輯器窗口中,并且按下F5鍵。Python會在編輯器窗口中編譯代碼,并且在shell窗口中運行它。
當運行包含幾個Python模塊的一個程序的時候,針對每個模塊(除了主模塊之外)編譯后的代碼,會被保存到一個二進制代碼文件中(以.pyc為擴展名的一個文件)。Python加載這些文件,以便運行隨后的程序(如果沒有對相應的.py文件做出修改的話)。
如果一個Python程序掛起了或者沒有正常結束的話,可以按下Ctrl+C鍵或關閉shell窗口來退出。
1.1.4 程序注釋
程序注釋是Python編譯器會忽略的文本,但是,作為文檔,它對于程序的閱讀者很有價值。Python中的單行注釋以一個#符號開頭,并且到當前行的末尾結束。它的顏色是紅色的(盡管由于本書是黑白印刷的,你并看不出來這一點)。如下所示:
# This is an end-of-line comment.
一個多行注釋是用3個單引號或3個雙引號括起來的一個字符串。這樣的注釋也叫作文檔字符串(docstring),表明它們可以記錄程序中的主要結構。前面給出的猜數字程序就包含了兩個文檔字符串。第一個文檔字符串在程序文件的頂部,充當了整個numberguess模塊的注釋。第二個文檔字符串在主函數的頭部之下,描述了這個函數做什么事情。盡管文檔字符串看上去很簡短,但是它們能在Python shell中為程序員提供幫助,因此扮演了一個重要的角色。
1.1.5 詞法元素
語言中的詞法元素是用于構造語句一類的單詞和符號。和所有的高級編程語言一樣,Python的一些基本符號是關鍵字,例如if、while和def。還包括了其他的一些詞法元素,例如標識符(名稱)、字面值(數字、字符串和其他內建的數據結構)、運算符和分隔符(引號、逗號、圓括號、方括號和花括號)。
1.1.6 拼寫和命名慣例
Python關鍵字和名稱都是區分大小寫的。因此,while是一個關鍵字,而While則是程序員定義的一個名稱。Python關鍵字是以小寫字母的方式拼寫的,并且在IDLE窗口中以橙色表示。
所有的Python名稱,其顏色都是黑色的,除非將其作為函數、類或方法名來引用,在這種情況下,它們顯示為藍色。名稱可以以一個字母或一個下劃線(‘_’)開頭,后面跟著任意多個字母、下劃線或者數字。
在本書中,模塊、變量、函數和方法的名稱,都是以小寫字母的形式來拼寫的。模塊名只有一種例外,就是當一個模塊名包含了一個或多個嵌入的名稱的時候,嵌入的名稱都是大寫的。類名也遵從相同的命名慣例,但是,類名的首字母是大寫的。當一個變量名是一個常量的時候,其所有的字母都是大寫的,并且會有一個下劃線用來隔開任何嵌入的名稱。表1.1給出了這些命名慣例的示例。
表1.1 Python命名慣例的示例
名稱類型
示例
變量
salary, hoursWorked, isAbsent
常量
ABSOLUTE_ZERO, INTEREST_RATE
函數或方法
printResults, cubeRoot, isEmpty
類
BankAccount, SortedSet
要使用能夠描述其在程序中的角色的名稱。通常,變量名應該是名詞或形容詞(如果它們表示布爾值的話,就是形容詞),而函數和方法名應該是動詞(如果它們表示動作)或者名詞或形容詞(如果它們表示返回的值)。
1.1.7 語法元素
一種語言的語法元素是由詞法元素組成的語句(表達式、語句和其他結構)的類型。和大多數的高級語言不同,Python使用空白(空格、制表符和換行)來標記多種類型的語句的語法。這意味著,在Python代碼中,縮進和換行是很重要的。像IDLE這樣的智能編輯器,能夠幫助正確地縮進。程序員不需要操心用分號隔開句子,或者用花括號來標記語句塊。在本書所有的Python代碼中,我使用4個空格寬度的縮進。
1.1.8 字面值
數字(整數或浮點數)的寫法和在其他編程語言中的寫法都是一樣的。布爾值True和False都是關鍵字。一些數據結構,例如字符串、元組、列表和字典,也擁有字面值,稍后我們將會看到這一點。
1.1.9 字符串字面值
可以用單引號、雙引號,或者成對的三個雙引號或三個單引號將字符串括起來。最后的這種表示方法,對于包含多行文本的字符串來說,是很有用的。字符值是單字符的字符串。\字符用于將非圖形化的字符(例如,換行\n和制表符\t,或者\字符本身)進行轉義。下面的代碼段及其輸出,展示了各種可能性:
print("Using double quotes")print(’Using single quotes’)print("Mentioning the word ’Python’ by quoting it")print("Embedding a\nline break with \\n")print("""Embedding a line break with triple quotes""")
輸出:
Using double quotesUsing single quotesMentioning the word ’Python’ by quoting itEmbedding a line break with \nEmbedding a line break with triple quotes
1.1.10 運算符和表達式
算術表達式使用標準的運算符(+、–、*和/)和中綴表示法。/運算符對于任何數字運算數,都會生成一個浮點數的結果,而//運算符則會產生一個整數的商。當+運算符用于集合(例如,字符串和列表)的時候,它表示連接。**運算符用于指數運算。
比較運算符(<、<=、>、>=、==和!=)用于數字和字符串。==運算符比較數據結構內部的內容(例如,兩個列表)在結構上的相等性。is運算符比較對象實體的兩個值。比較會返回True或False。
邏輯運算符and、or和not會將幾個值(例如0、None、空字符串和空列表)作為False對待。相反,它們會將大多數其他的Python值當作True對待。
下標運算符[]和集合一起使用,稍后將會介紹它。
選擇器運算符.用于引用一個模塊、類或對象中的一個具名的項。
運算符都有標準的優先級(依次是選擇器運算符、函數調用、下標運算符、算術運算符、比較運算符、邏輯運算符、賦值運算符)。括號通常用于將一個子表達式括起來,方便更早地運算它。**和=運算符是右結合性的,而其他的運算符是左結合性的。
1.1.11 函數調用
函數調用的通常形式是函數名后面跟著用括號括起來的參數列表。例如:
min(5, 2) # Returns 2
Python包含了一些標準的函數,例如abs和round。很多其他的函數,可以通過導入模塊的方式而變得可用,稍后你將會看到這一點。
1.1.12 print函數
標準輸出函數print會將其參數顯示到控制臺。這個函數允許不同個數的參數。Python自動在每個參數上運行str函數,以獲取其字符串表示,并且在輸出之前用一個空格將每一個字符串隔開。默認情況下,輸出結束的時候會使用一個換行。
1.1.13 input函數
標準輸入函數input會等待用戶通過鍵盤輸入文本。當用戶按下回車鍵的時候,該函數返回了包含所輸入的字符的一個字符串。這個函數接受一個可選的字符串作為其參數,并且會不換行地打印出這個字符串,以提示用戶進行輸入。
1.1.14 類型轉換函數和混合模式運算
可以將一些數據類型名稱當作類型轉換函數來使用。例如,當用戶輸入一個數字的時候,input函數返回數字組成的一個字符串,而不是一個數字值。程序必須先把這個字符串轉換為int類型或float類型,然后才能夠進行數字處理。下面的代碼段輸入了一個圓的半徑,將這個字符串轉換為float型,然后計算并輸出了這個圓形的面積:
radius = float(input("Radius: "))print("The area is", 3.14 * radius ** 2)
和大多數其他的編程語言一樣,Python允許算術表達式中的運算數具有不同的數值類型。在這種情況下,結果的類型和最為通用的運算數的類型相同。例如,int型和float型相加,將會得到float型的結果。
1.1.15 可選的和關鍵字函數參數
函數允許可選的參數,可選的參數在函數調用的時候是通過關鍵字來指定的。例如,print函數默認地會在其要顯示的參數后面輸出一個換行。為了阻止這種情況發生,可以給可選的參數end一個空字符串的值,如下所示:
print("The cursor will stay on this line, at the end", end = "")
必需的參數是沒有默認值的。可選的參數有默認值,并且當使用其關鍵字的時候,它們可以按照任意的順序出現,只要都放在必需的參數之后就可以了。
例如,標準函數round期望一個必需的參數,這是一個舍入的值。還有一個可選的參數,表示精度的位數。當省略第2個參數的時候,該函數返回最近的整數值(int型)。當包含第2個參數的時候,該函數返回float型。
通常,調用函數的時候傳遞給它的參數的個數,至少要和它的必需參數的個數相同。
在調用標準函數和Python的庫函數時,它們會檢查其參數的類型。程序員定義的函數可以接受任意類型的參數,包括函數和類型自身。
1.1.16 變量和賦值語句
一個Python變量是通過一條賦值語句來引入的。例如:
PI = 3.1416
將PI的值設為3.1416。一條簡單的賦值語句的語法是:
=
在同一條賦值語句中可以引入多個變量,如下所示:
minValue, maxValue = 1, 100
要交換變量a和變量b的值,可以像下面這樣編寫代碼:
a, b=b,a
賦值語句必須出現在單個的一行代碼之中,除非這一行是在一個逗號、圓括號、花括號或方括號之后換行。當不具備這些選擇的時候,在一條語句中換行的另一種方式是,用一個轉義字符\來結束一行。通常將這個符號放在一個表達式中的運算符之前或之后。如下是一些顯然不太符合實際情況的例子:
minValue = min(100, 200) product = max(100, 200) \ *30
當你在一個逗號或轉義符號之后按下回車鍵的時候,IDLE會自動縮進下一行的代碼。
1.1.17 Python數據類型
在Python中,任何變量都可以指定任何類型的一個值。變量不會聲明為某一個類型,這和很多其他語言中的情況不同,變量會被直接賦一個值。
因此,數據類型名稱不會出現在Python程序中。然而,所有的值和對象都是有類型的。表達式中的運算數的類型會在運行時檢查,因此,類型錯誤一定會進行檢查;然而,在編寫代碼的時候,程序員不必關心數據類型。
1.1.18 import語句
import語句使得另一個模塊中的標識符可以被一個程序所見到。這些標識符可能是對象名、函數名或類名。有幾種方式可以表示一條import語句。最簡單的方式是,導入一個模塊名稱,例如:
import math
這使得在math模塊中定義的任何名稱,在當前的模塊中都可以通過math.形式的語法而變得可用。因此,math.sqrt(2)將會返回2的平方根。
另一種導入的形式是,只導入要使用的名稱自身,這樣一來,就可以不帶有模塊名作為前綴而直接使用該名稱了:
from math import sqrtprint(sqrt(2))
可以通過列出幾個單獨的名稱來導入它們:
from math import pi, sqrtprint(sqrt(2) * pi)
可以使用*運算符導入一個模塊中所有的名稱,但是,我們并不認為這是好的做法。
1.1.19 獲取關于程序組件的幫助
盡管Python的Web站點www.python.org擁有Python語言的完整文檔,但是在Python shell中也可以快速獲取和語言大部分組成部分相關的幫助信息。要訪問這樣的幫助信息,只需要在shell提示符中輸入名為help( )的函數,其中的是模塊、數據類型、函數或方法的名稱。例如,調用help(abs)和(math.sqrt)分別會顯示abs和math.sqrt函數的文檔。調用help(int)和help(math)將會分別顯示int類型和math模塊中的所有操作的文檔。
注意,如果一個模塊并非是在shell啟動的時候Python將要加載的內建模塊,程序員必須先導入模塊,然后才能請求關于它的幫助信息。例如,shell中的如下會話,將會顯示本章前面所介紹的numberguess程序的文檔:
>>> import numberguess>>> help(numberguess)Help on module numberguess: NAME numberguess DEION Author: Ken Lambert Plays a game of guess the number with the user. FUNCTIONS main() Inputs the bounds of the range of numbers, andletstheuserguessthecomputer’snumberuntil the guess is correct. FILE /Users/ken/Documents/CS2Python/Chapters/Chapter1/numberguess.py
1.2 控制語句
Python包含了針對序列、條件式執行和迭代等情況的、常見的各種控制語句。語句的序列是一條接著一條編寫的一組語句。一個序列中的每一條語句,都必須以相同的縮進開始。本節將會介紹條件式執行和迭代的控制語句。
本書摘自《數據結構(python描述)》
點擊封面查看本書
在計算機科學中,數據結構是一門進階性課程,概念抽象,難度較大。Python語言的語法簡單,交互性強。用Python來講解數據結構等主題,比C語言等實現起來更為容易,更為清晰。 本書第1章簡單介紹了Python語言的基礎知識和特性。第2章到第4章對抽象數據類型、數據結構、復雜度分析、數組和線性鏈表結構進行了詳細介紹,第5章和第6章重點介紹了面向對象設計的相關知識、第5章包括接口和實現之間的重點差異、多態以及信息隱藏等內容,第6章主要講解繼承的相關知識,第7章到第9章以棧、隊列和列表為代表,介紹了線性集合的相關知識。第10章介紹了各種樹結構,第11章講解了集和字典的相關內容,第12章介紹了圖和圖處理算法。每章最后,還給出了復習題和案例學習,幫助讀者鞏固和思考。返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的python的类程序的结构_Python程序员学习路径之数据结构篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python导入csv报错_Python
- 下一篇: python的threading库_py