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