演算法工程師修仙之路:python3官方文件筆記(三)
本筆記來自於python手冊的中文版
Python 簡介
-
Python 中的註釋以 # 字元起始,直至實際的行尾。
-
註釋可以從行首開始,也可以在空白或程式碼之後,但是不出現在字串中。
-
文字字串中的 # 字元僅僅表示 # 。
-
程式碼中的註釋不會被 Python 解釋,可以忽略它們。
# 這是第一行 spam = 1 # 這是第二行 # ... 現在是第三行了! text = "# This is not a comment because it's inside quotes."
將 Python 當做計算器
數字
-
直譯器表現得就像一個簡單的計算器:可以向其錄入一些表示式,它會給出返回值。
-
表示式語法很直白:運算子 +,-,* 和 / 與其它語言一樣,括號 (()) 用於分組。
-
整數(例如,2, 4, 20 )的型別是int,帶有小數部分的數字(例如,5.0, 1.6)的型別是float。
-
除法(/)永遠返回一個浮點數。如要使用 floor 除法並且得到整數結果(丟掉任何小數部分),你可以使用 // 運算子,要計算餘數你可以使用%。
>>> 17 / 3 # 經典除法返回一個浮點數 5.666666666666667 >>> >>> 17 // 3 # 丟棄了分數部分 5 >>> 17 % 3 # %運算子返回除法的餘數部分 2
-
通過 Python,還可以使用 ** 運算子計算冪乘方:
>>> 5 ** 2 # 5的平方 25 >>> 2 ** 7 # 2的7次方 128
-
等號( ‘=’ )用於給變數賦值。賦值之後,在下一個提示符之前不會有任何結果顯示。
-
變數在使用前必須 “定義”(賦值),否則會出錯。
-
浮點數有完整的支援,整數和浮點數的混合計算中,整數會被轉換為浮點數。
-
互動模式中,最近一個表示式的值賦給變數 _。
-
這樣我們就可以把它當作一個桌面計算器,很方便的用於連續計算:
>>> tax = 12.5 / 100 >>> price = 100.50 >>> price * tax 12.5625 >>> price + _ # _代表price*tax 113.0625 >>> round(_, 2) # _代表price+price*tax 113.06
-
此變數對於使用者是隻讀的。不要嘗試給它賦值 —— 你只會建立一個獨立的同名區域性變數,它遮蔽了系統內建變數的魔術效果。
-
除了 int 和 float,Python 還支援其它數字型別,例如 Decimal 和 Fraction 。
-
Python 還內建支援複數 ,使用字尾 j 或 J 表示虛數部分(例如,3+5j)。
-
字串
-
Python 用單引號 (’…’) 或雙引號 ("…") 標識表示字串。
-
\ 可以用來轉義引號。
>>> 'spam eggs' # 單引號 'spam eggs' >>> 'doesn\'t' # 使用\'來轉義單引號 "doesn't" >>> "doesn't" # 或者使用雙引號 "doesn't" >>> '"Yes," he said.' '"Yes," he said.' >>> "\"Yes,\" he said." '"Yes," he said.' >>> '"Isn\'t," she said.' '"Isn\'t," she said.'
-
在互動式直譯器中,輸出的字串會用引號引起來,特殊字元會用反斜槓轉義。如果字串中只有單引號而沒有雙引號,就用雙引號引用,否則用單引號引用。
-
print() 函式生成可讀性更好的輸出, 它會省去引號並且打印出轉義後的特殊字元:
>>> '"Isn\'t," she said.' '"Isn\'t," she said.' >>> print('"Isn\'t," she said.') "Isn't," she said. >>> s = 'First line.\nSecond line.' # \n表示換行符 >>> s # 沒有print(),\n包含在輸出中 'First line.\nSecond line.' >>> print(s) # 使用print(),\n生成一個新行 First line. Second line.
-
如果你前面帶有 \ 的字元被當作特殊字元,你可以使用原始字串,方法是在第一個引號前面加上一個r:
>>> print('C:\some\name') # 這裡\n的意思是換行! C:\some ame >>> print(r'C:\some\name') # 注意引號前的r C:\some\name
-
字串文字能夠分成多行。
-
一種方法是使用三引號:"""…""" 或者 ‘’’…’’’。
-
行尾換行符會被自動包含到字串中,但是可以在行尾加上 \ 來避免這個行為。
-
可以使用反斜槓為行結尾的連續字串,它表示下一行在邏輯上是本行的後續內容:
print("""\ Usage: thingy [OPTIONS] -h 顯示此使用訊息 -H hostname 要連線的主機名 """) # 將生成以下輸出(注意,沒有開始的第一行): Usage: thingy [OPTIONS] -h 顯示此使用訊息 -H hostname 要連線的主機名
-
-
字串可以由 + 操作符連線(粘到一起),可以由 * 表示重複:
>>> # 3 times 'un', followed by 'ium' >>> 3 * 'un' + 'ium' 'unununium'
-
相鄰的兩個字串文字自動連線在一起。它只用於兩個字串文字,不能用於字串表示式,如果你想連線多個變數或者連線一個變數和一個字串文字,使用 + 。
>>> 'Py' 'thon' 'Python' >>> prefix = 'Py' >>> prefix 'thon' # 不能連線一個變數和一個字串文字 ... SyntaxError: invalid syntax >>> ('un' * 3) 'ium' ... SyntaxError: invalid syntax
-
字串也可以被擷取(檢索)。
- 類似於 C ,字串的第一個字元索引為 0 。
- Python沒有單獨的字元型別;一個字元就是一個簡單的長度為1的字串。
- 索引也可以是負數,這將導致從右邊開始計算。
- 請注意 -0 實際上就是 0,所以它不會導致從右邊開始計算。
-
除了索引,還支援切片。
-
索引用於獲得單個字元,切片讓你獲得一個子字串。
-
注意,包含起始的字元,不包含末尾的字元。這使得 s[:i] + s[i:] 永遠等於 s。
>>> word[0:2] # 從位置0(包括)到位置2(不包括)的字元 'Py' >>> word[2:5] # 從位置2(包括)到位置5(不包括)的字元 'tho' >>> word[:2] + word[2:] 'Python' >>> word[:4] + word[4:] 'Python'
-
切片的索引有非常有用的預設值,省略的第一個索引預設為零,省略的第二個索引預設為切片的字串的大小。
>>> word[:2] # 從開始到位置2的字元(不包括) 'Py' >>> word[4:] # 從位置4(包括)到結尾的字元 'on' >>> word[-2:] # 字元從倒數第二(包括)到最後 'on'
-
切片時的索引是在兩個字元之間 。
- 左邊第一個字元的索引為 0,而長度為 n 的字串其最後一個字元的右界索引為 n。
- 文字中的第一行數字給出字串中的索引點 0…6。
- 第二行給出相應的負索引。
- 切片是從 i 到 j 兩個數值標示的邊界之間的所有字元。
- 對於非負索引,如果上下都在邊界內,切片長度就是兩個索引之差。
-
-
試圖使用太大的索引會導致錯誤,Python 能夠優雅地處理那些沒有意義的切片索引。
-
一個過大的索引值(即下標值大於字串實際長度)將被字串實際長度所代替。
-
當上邊界比下邊界大時(即切片左值大於右值)就返回空字串。
>>> word[4:42] 'on' >>> word[42:] ''
-
-
Python字串不可以被更改 , 它們是不可變的。
-
賦值給字串索引的位置會導致錯誤。
-
如果你需要一個不同的字串,你應該建立一個新的。
-
內建函式 len() 返回字串長度。
>>> word[0] = 'J' ... TypeError: 'str' object does not support item assignment >>> word[2:] = 'py' ... TypeError: 'str' object does not support item assignment >>> 'J' + word[1:] 'Jython' >>> word[:2] + 'py' 'Pypy' >>> s = 'supercalifragilisticexpialidocious' >>> len(s) 34
-
列表
-
Python 有幾個複合資料型別,用於表示其它的值。最通用的是 list (列表) ,它可以寫作中括號之間的一列逗號分隔的值。
-
列表的元素不必是同一型別:
>>> squares = [1, 4, 9, 16, 25] >>> squares [1, 4, 9, 16, 25]
-
就像字串(以及其它所有內建的序列型別)一樣,列表可以被索引和切片。所有的切片操作都會返回一個包含請求的元素的新列表,列表支援連線操作。
>>> squares[0] # 索引返回項 1 >>> squares[-1] 25 >>> squares[-3:] # 切片返回一個新列表 [9, 16, 25] >>> squares + [36, 49, 64, 81, 100] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
-
不像不可變的字串,列表是可變的,它允許修改元素。你還可以使用append()方法在列表的末尾新增新的元素。
>>> cubes = [1, 8, 27, 65, 125] >>> 4 ** 3 64 >>> cubes[3] = 64 # 替換錯誤的值 >>> cubes [1, 8, 27, 64, 125] >>> cubes.append(216) # 加上6的立方 >>> cubes.append(7 ** 3) # 7的立方 >>> cubes [1, 8, 27, 64, 125, 216, 343]
-
也可以對切片賦值,此操作可以改變列表的尺寸,或清空它:
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> letters ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> # 替換一些值 >>> letters[2:5] = ['C', 'D', 'E'] >>> letters ['a', 'b', 'C', 'D', 'E', 'f', 'g'] >>> # 現在刪除它們 >>> letters[2:5] = [] >>> letters ['a', 'b', 'f', 'g'] >>> # 通過將所有元素替換為空列表來清除列表 >>> letters[:] = [] >>> letters []
-
內建函式 len() 同樣適用於列表並且允許巢狀列表(建立一個包含其它列表的列表)。
>>> a = ['a', 'b', 'c'] >>> n = [1, 2, 3] >>> x = [a, n] >>> x [['a', 'b', 'c'], [1, 2, 3]] >>> x[0] ['a', 'b', 'c'] >>> x[0][1] 'b'
程式設計的第一步
-
菲波那契子序列
>>> # 菲波那契子序列 ... # 兩個元素的和定義了下一個元素 ... a, b = 0, 1 >>> while b < 10: ... print(b) ... a, b = b, a+b ... 1 1 2 3 5 8
-
第一行包括了一個 多重賦值:變數 a 和 b 同時獲得了新的值 0 和 1 ,最後一行又使用了一次。
-
變數賦值前,右邊首先完成計算。右邊的表示式從左到右計算。
-
條件(這裡是 b < 10 )為 true 時, while 迴圈執行。
-
在 Python 中,類似於 C,任何非零整數都是 true ,0 是 false 。
-
條件也可以是字串或列表,實際上可以是任何序列。
-
所有長度不為零的是 true,空序列是 false。
-
標準比較操作符與 C 相同: < , > , == , <=, >= 和 !=。
-
迴圈體是縮排的,縮排是 Python 組織語句的方法。Python 不提供整合的行編輯功能,所以你要為每一個縮排行輸入 TAB 或空格。
-
大多數文字編輯器提供自動縮排。互動式錄入複合語句時,必須在最後輸入一個空行來標識結束(因為直譯器沒辦法猜測你輸入的哪一行是最後一行),需要 注意的是同一個語句塊中的每一行必須縮排同樣數量的空白。
-
關鍵字 print() 語句輸出給定表示式的值,它控制多個表示式和字串輸出為你想要字串。
-
字串列印時不用引號包圍,每兩個子項之間插入空間,所以你可以把格式弄得很漂亮,用一個逗號結尾就可以禁止輸出換行:
>>> i = 256*256 >>> print('The value of i is', i) The value of i is 65536 >>> a, b = 0, 1 >>> while b < 1000: ... print(b, end=',') ... a, b = b, a+b ... 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
-