
3. 速覽下列示例借由是否展示提示符 ( 與 ) 對輸入和輸出予以區(qū)分: 于輸入示例里的代碼之際, 需鍵入以提示符起始的行中提示符之后的全部內(nèi)容并非以提示符起始的行乃是解釋器的輸出。留意, 示例中的某行所出現(xiàn)的第二個提示符是用以終結(jié)多行命令的, 在此情形下, 需鍵入一個空白行。你能夠運用Copy 按鈕, 它會于懸?;蛘唿c擊代碼示例之際, 在右上角予以顯示, 通過它能夠去除提示符, 并且省略輸出, 從而把輸入行復(fù)制粘貼至你的解釋器。本手冊里有著諸多的例子, 就連交互式命令之中也是含有注釋的。注釋是以 # 開頭開啟的, 會持續(xù)到這一物理行最后結(jié)束。注釋或者處于行的開頭部位, 又或者在空白符跟前以及代碼之后的位置, 然而絕對不在字符串里邊。字符串里的 # 號純粹就是 # 號。注釋屬于用來闡明代碼的, 是不解釋注釋的那種注釋, 在鍵入例子的時候, 可以不把注釋給輸入進(jìn)去。示例如下# 這是第一條注釋 spam 1 # 而這是第二條注釋 # ... 而這是第三條 text # 這不是注釋因為它是在引號之內(nèi)。3.1. 用作計算器使我們?nèi)ピ囍捎靡恍┖喖s的命令, 開啟解釋器與此同時等候主提示符 呈現(xiàn), 理應(yīng)不會等待太長時間3.1.1. 數(shù)字將解釋器當(dāng)作一臺簡單的計算器, 你可鍵入一個表達(dá)式, 使其給出結(jié)果值, 表達(dá)式語法直觀, 運算符 、-、* 和 / 能用來執(zhí)行算術(shù)運算, 圓括號 (()) 能用來進(jìn)行分組, 例如:。 2 2 4 50 - 5*6 20 (50 - 5*6) / 4 5.0 8 / 5 # 除法運算總是返回一個浮點數(shù) 1.6用于表示像2、4、20之類沒有小數(shù)部分的數(shù), 所屬的類型是整數(shù)的類型 , 而帶有像5.0、1.6呀這樣存在小數(shù)部分的數(shù), 其所歸屬的類型是帶小數(shù)部分?jǐn)?shù)的類型。本教程在后續(xù)的部分階段將會去介紹更多與之相關(guān)的數(shù)字類型。進(jìn)行除法運算時, 也就是使用 (/) 這個符號時, 其總會返回浮點數(shù)。倘若你打算做 , 以便得到一個整數(shù)結(jié)果, 那么你能夠運用 // 這個運算符要是你想計算余數(shù), 那你可以使用 %: 17 / 3 # 經(jīng)典除法運算返回一個浮點數(shù) 5.666666666666667 17 // 3 # 向下取整除法運算會丟棄小數(shù)部分 5 17 % 3 # % 運算返回相除的余數(shù) 2 5 * 3 2 # 向下取整的商 * 除數(shù) 余數(shù) 17用 ** 運算符計算乘方 5 ** 2 # 5 的平方 25 2 ** 7 # 2 的 7 次方 128用于給變量賦值的是等號, 賦值之后, 在接下來的交互提示符所處位置不會顯示任何結(jié)果。 width 20 height 5 * 9 width * height 900如果變量未定義即未賦值使用該變量會提示錯誤 n # 試圖訪問一個未定義的變量 Traceback (most recent call last): File , line 1, in NameError: name n is not defined對浮點數(shù)給予全面支持, 混合類型運算數(shù)進(jìn)行運算時, 會把整數(shù)轉(zhuǎn)化為浮點數(shù)。 4 * 3.75 - 1 14.0交互模式之中, 上次輸出的那個表達(dá)式會被賦予給變量 _ , 在把 當(dāng)作計算器來使用那會兒, 借助該變量去達(dá)成下一步的計算會顯得更為簡單, 就比如: tax 12.5 / 100 price 100.50 price * tax 12.5625 price _ 113.0625 round(_, 2) 113.06最好把那個變量當(dāng)成只讀的類型, 不要給它進(jìn)行顯式賦值, 不然的話會創(chuàng)建出一個有著相同名字的獨立局部變量, 那個變量會通過它的魔法行為來屏蔽內(nèi)置變量。除去 和 之外, 它還對別的數(shù)字類型予以支持, 像是 或者。它還在內(nèi)部具備支持, 后綴 j 或者 J 被用來表明虛數(shù)舉例來說 35j。3.1.2. 文本除了數(shù)字之外, 還能夠?qū)ξ谋具M(jìn)行操作, 這由類型呈現(xiàn), 被稱作“字符串”。這涵蓋了字符“!”, 單詞“”, 名稱“Paris”, 句子“Got your back.”等等“Yay! :)”。它們能夠使用成對的單引號...抑或是雙引號...來加以標(biāo)示, 最終的結(jié)果全都一樣。 spam eggs # 單引號 spam eggs Paris rabbit got your back :)! Yay! # 雙引號 Paris rabbit got your back :)! Yay! 1975 # 引號中的數(shù)字也是字符串 1975需要對引號本身進(jìn)行標(biāo)示時, 我們得對其做“轉(zhuǎn)義”處理, 也就是在它前面加上一個 \。或者呢, 我們能夠選用不同種類的引號:。 doesn\t # 使用 \ 來轉(zhuǎn)義單引號... doesnt doesnt # ...或者改用雙引號 doesnt Yes, they said. Yes, they said. \Yes,\ they said. Yes, they said. Isn\t, they said. Isn\t, they said.于shell之內(nèi), 字符串的定義以及輸出字符串, 看上去興許會有所不同。函數(shù)會將標(biāo)示所用的引號略去, 并且打印經(jīng)過轉(zhuǎn)義的特殊字符, 進(jìn)而產(chǎn)生更為易于閱讀的輸出。 s First line.\nSecond line. # \n 表示換行符 s # 不用 print()特殊字符將包括在字符串中 First line.\nSecond line. print(s) # 用 print()特殊字符會被轉(zhuǎn)寫因此 \n 將產(chǎn)生一個新行 First line. Second line.倘若不期望前置了 \ 的字符被轉(zhuǎn)義成特殊字符, 那么能夠運用原始字符串, 只需在此引號的前面增添一個 r 便可: print(C:\this\name) # 這里 \t 表示制表符\n 表示換行符 C: his ame print(rC:\this\name) # 請注意引號前的 r C:\this\name有一個關(guān)于原始字符串的微妙限制, 即原始字符串不能以奇數(shù)個 \ 字符收尾, 要想知道更多信息以及繞過的辦法, 可進(jìn)行參閱。字符串字面值能夠跨越好多行, 有一種做法是采用三重引號, 也就是... 或者 ..., 行行盡頭符會自動被囊括在字符串里頭, 不過能夠借由在行的末尾添加上 \ 來躲開此種行為, 在下面所舉的例子當(dāng)中, 一開始的換行符將不會被包含進(jìn)去:。 print(\ ... Usage: thingy [OPTIONS] ... -h Display this usage message ... -H hostname Hostname to connect to ... ) Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to 字符串可以用 合并粘到一起也可以用 * 重復(fù) # 3 乘以 un再加 ium 3 * un ium unununium緊鄰著的兩個或者多個被引號標(biāo)注字符的 字面量 , 會自動進(jìn)行合并: Py thon Python拼接分隔開的長字符串時這個功能特別實用 text (Put several strings within parentheses ... to have them joined together.) text Put several strings within parentheses to have them joined together.這項功能只能用于兩個字面值不能用于變量或表達(dá)式 prefix Py prefix thon # 不能拼接變量和字符串字面值 File , line 1 prefix thon ^^^^^^ SyntaxError: invalid syntax (un * 3) ium File , line 1 (un * 3) ium ^^^^^ SyntaxError: invalid syntax合并多個變量或合并變量與字面值要用 prefix thon Python于字符串而言, 其會支持索引這種行為通過下標(biāo)來進(jìn)行訪問, 其中第一個字符所對應(yīng)的索引數(shù)值是0。關(guān)于單字符, 它并沒有專門特定的類型, 實際上就是那種長度為一的字符串形式: word Python word[0] # 0 號位的字符 P word[5] # 5 號位的字符 n索引還支持負(fù)數(shù)用負(fù)數(shù)索引時從右邊開始計數(shù) word[-1] # 最后一個字符 n word[-2] # 倒數(shù)第二個字符 o word[-6] P注意-0 和 0 一樣因此負(fù)數(shù)索引從 -1 開始。不算索引方面的操作, 另一種被支持的是切片, 索引是起到獲取單一字符作用的, 然而切片則能夠讓你去獲取子字符串句號。 word[0:2] # 從 0 號位 (含) 到 2 號位 (不含) 的字符 Py word[2:5] # 從 2 號位 (含) 到 5 號位 (不含) 的字符 tho切片索引具極有用之默認(rèn)值, 當(dāng)省略起始索引時默認(rèn)指向零起始位置當(dāng)省略結(jié)束索引時默認(rèn)指向字符串末尾處。 word[:2] # 從開頭到 2 號位 (不含) 的字符 Py word[4:] # 從 4 號位 (含) 到末尾 on word[-2:] # 從倒數(shù)第二個 (含) 到末尾 on留意, 輸出相應(yīng)結(jié)論覆蓋切片起始之處, 且不涵蓋切片截止之點。所以, s 加上 s 始終等同于 s: word[:2] word[2:] Python word[:4] word[4:] Python從另一種角度去理解切片, 索引所指向的位置是字符之間, 將第一個字符的左側(cè)標(biāo)記為0, 把最后一個字符的右側(cè)標(biāo)記為n, 而n是字符串的長度。比如說:------------------ | P | y | t | h | o | n | ------------------ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1字符串里, 索引0到6所處位置對應(yīng)的那一行數(shù)字, 是第一行數(shù)字, 與之對應(yīng)的負(fù)數(shù)索引位置的那一行數(shù)字, 是第二行數(shù)字。i至j之間所有對應(yīng)字符所構(gòu)成的部分, 是字符串從i到j(luò)的切片。要是針對運用非負(fù)索引去進(jìn)行切片操作, 倘若這兩個索引其中任何一個均不存在超越邊界的情況, 那么切片具體的長度便應(yīng)該是起始索引以及終止索引的差值。也就是說, 就像是這樣, 比如 word 的長度為 2。索引越界會報錯 word[42] # word 只有 6 個字符 Traceback (most recent call last): File , line 1, in IndexError: string index out of range但是切片會自動處理越界索引 word[4:42] on word[42:] 字符串沒法進(jìn)行修改, 這是確定無疑的。所以, 給字符串里某個索引位置去進(jìn)行賦值就會出現(xiàn)報錯: word[0] J Traceback (most recent call last): File , line 1, in TypeError: str object does not support item assignment word[2:] py Traceback (most recent call last): File , line 1, in TypeError: str object does not support item assignment要生成不同的字符串應(yīng)新建一個字符串 J word[1:] Jython word[:2] py Pypy內(nèi)置函數(shù) 返回字符串的長度 s supercalifragilisticexpialidocious len(s) 34參見字符串是 序列類型 支持序列類型的各種操作。字符串支持很多變形與查找方法。內(nèi)嵌表達(dá)式的字符串字面值。使用 格式化字符串。這里詳述了用 % 運算符格式化字符串的操作。3.1.3. 列表在支持眾多復(fù)合數(shù)據(jù)類型的情況下, 能夠把不一樣的值組合到一塊兒。其中, 最為常用的列表, 它是借助方括號來加以標(biāo)注, 并且是通過逗號來實施分隔的一組值。列表能夠囊括不同類型的元素, 然而按一般情形來講, 各個元素所具備的類型是相同的: squares [1, 4, 9, 16, 25] squares [1, 4, 9, 16, 25]和字符串及其他內(nèi)置 類型一樣列表也支持索引和切片 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]與 字符串不同, 列表是 類型其內(nèi)容可以改變 cubes [1, 8, 27, 65, 125] # 這里有點問題 4 ** 3 # 4 的立方是 64不是 65 64 cubes[3] 64 # 替換錯誤的值 cubes [1, 8, 27, 64, 125]通過運用 方式 , 于列表的末尾之處添加全新的條目 , 這一點你同樣是能夠做到的 , 關(guān)于該方式的更多介紹 , 我們會將其放置于后文才呈現(xiàn)出來。 cubes.append(216) # 添加 6 的立方 cubes.append(7 ** 3) # 和 7 的立方 cubes [1, 8, 27, 64, 125, 216, 343]中的單純簡單賦值絕對不會去復(fù)制數(shù)據(jù), 當(dāng)你把一個列表賦予給一個變量的時候, 這個變量將會去引用已存在的列表, 你借助一個變量針對列表所做的任何改變都將會被引用它的所有其他變量給看到, :。 rgb [Red, Green, Blue] rgba rgb id(rgb) id(rgba) # 它們指向同一個對象 True rgba.append(Alph) rgb [Red, Green, Blue, Alph]新列表內(nèi)包含著由切片操作返回的, 請求的元素, 切片操作會返回的是以下的列表: correct_rgba rgba[:] correct_rgba[-1] Alpha correct_rgba [Red, Green, Blue, Alpha] rgba [Red, Green, Blue, Alph]為切片賦值可以改變列表大小甚至清空整個列表 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] # 現(xiàn)在移除它們 letters[2:5] [] letters [a, b, f, g] # 通過用一個空列表替代所有元素來清空列表 letters[:] [] letters []內(nèi)置函數(shù) 也支持列表 letters [a, b, c, d] len(letters) 4還可以嵌套列表創(chuàng)建包含其他列表的列表例如 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] b3.2. 走向編程的第一步顯然, 我們能夠運用 去達(dá)成比二加上二更為繁瑣的任務(wù)。舉個例子, 我們能夠采用像如下這般的方式來撰寫出該斐波那契數(shù)列最先開始部分的子序列: # 斐波那契數(shù)列 # 前兩項之和即下一項的值 a, b 0, 1 while a 10: ... print(a) ... a, b b, ab ... 0 1 1 2 3 5 8本例引入了幾個新功能。備注由于 ** 這一運算符號 比 - 的運算優(yōu)先級 更高, 以至于, 這里的 -3**2 就會被解釋為 -(3**2) , 依據(jù)這個規(guī)則, 其最終結(jié)果是 -9。若要避免出現(xiàn)這樣的問題 , 并且使結(jié)果得到 9 , 那么此時可以采用 (-3)**2 這種表達(dá)形式。和別樣的語言不一樣, 特別的字符 像 \n 在單引號 (...) 和雙引號 (...) 里頭的意思相同, 這兩種引號僅有的差別是, 無需在單引號里對雙引號 轉(zhuǎn)義 不過這時必須把單引號轉(zhuǎn)義成 \, 反過來也是這樣。