Python中文手冊(漢譯).doc_第1頁
Python中文手冊(漢譯).doc_第2頁
Python中文手冊(漢譯).doc_第3頁
Python中文手冊(漢譯).doc_第4頁
Python中文手冊(漢譯).doc_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Python 手冊file:/Users/moon/Incoming/py//Manual/Python/tut/index.html09-5-21 08:00:58目錄Python 手冊Guido van RossumFred L. Drake, Jr., editorPythonLabsEmail: Release 2.3July 29, 2003About this document .Python Tutorial, July 29, 2003, Release 2.3This document was generated using the LaTeX2HTML translator.LaTeX2HTML is Copyright 1993, 1994, 1995, 1996, 1997, Nikos Drakos, Computer Based Learning Unit, University of Leeds, and Copyright 1997, 1998, Ross Moore, Mathematics Department, Macquarie University, Sydney.The application of LaTeX2HTML to the Python documentation has been heavily tailored by Fred L. Drake, Jr. Original navigation icons were contributed by Christopher Petrilli.前言Copyright 2001, 2002, 2003 Python Software Foundation. All rights reserved. Copyright 2000 BeO. All rights reserved.Copyright 1995-2000 Corporation for National Research Initiatives. All rights reserved. Copyright 1991-1995 Stichting Mathematisch Centrum. All rights reserved.See the end of this document for complete license and permissions information.概要:Python 是一種容易學(xué)習(xí)的強(qiáng)大語言。 它包括了高效的高級數(shù)據(jù)結(jié)構(gòu),提供了一個(gè)簡單但很有有效的方式以便 進(jìn)行面向?qū)ο缶幊?。Python 優(yōu)雅的語法,動態(tài)數(shù)據(jù)類型,以及它的解釋器,使其成為了大多數(shù)平臺上應(yīng)用于各 領(lǐng)域理想的腳本語言以及開發(fā)環(huán)境。Python解釋器及其擴(kuò)展標(biāo)準(zhǔn)庫的源碼和編譯版本可以從Python的Web站點(diǎn)/及其所有鏡像 站上免費(fèi)獲得,并且可以自由發(fā)布。該站點(diǎn)上也提供了Python的一些第三方模塊,程序,工具,以及附加的文 檔。Python的解釋器很容易通過C或C+(或者其它可以由C來調(diào)用的語言)來實(shí)現(xiàn)功能和數(shù)據(jù)結(jié)構(gòu)的擴(kuò)展。因 些Python 也很適于做為定制應(yīng)用的一種擴(kuò)展語言。這個(gè)手冊介紹了一些Python語言及其系統(tǒng)的基本知識與根念。這有助于對Python有一個(gè)基本的認(rèn)識,當(dāng)然所有 的例子都包括在里面了,所以這本手冊很適合離線閱讀。需要有關(guān)標(biāo)準(zhǔn)對象和模塊的詳細(xì)介紹的話,請查詢Python 程序庫參考手冊 文檔。Python 參考手冊 提供了更多 的關(guān)于語言方面的正式說明。需要編寫C或C+擴(kuò)展,請閱讀 Python 解釋器的擴(kuò)展和集成 以及Python/C API 參 考手冊。 這幾本書涵蓋了各個(gè)深度上的Python知識。本手冊不會涵蓋Python的所有功能,也不會去解釋所用到的所有相關(guān)的知識。相反,它介紹了許多Python中最 引人注目的功能,這會對讀者掌握這門語言的風(fēng)格大有幫助。讀過它后,你應(yīng)該可以閱讀和編寫Python模塊和 程序了,接下來你可以從Python 庫參考手冊中進(jìn)一步學(xué)習(xí)Python復(fù)雜多變的庫和模塊了。1. 開胃菜1. 開胃菜如果你寫過大規(guī)模的Shell腳本,應(yīng)該會有過這樣的體會:你還非常想再加一些別的功能進(jìn)去,但它已經(jīng)太大、 太慢、太復(fù)雜了;或者這個(gè)功能需要調(diào)用一個(gè)系統(tǒng)函數(shù),或者它只適合通過C來調(diào)用通常這些問題還不足 以嚴(yán)肅到需要用C重寫這個(gè)Shell;可能這個(gè)功能需要一些類似變長字符串或其它一些在Shell腳本中很容易找到 的數(shù)據(jù)類型(比如文件名的有序列表),但它們用C來實(shí)現(xiàn)就要做大量的工作,或者,你對C還不是很熟悉。另一種情況:可能你需要使用幾個(gè)C庫來工作,通常C的編寫/編譯/測試/重編譯周期太慢。你需要盡快的開發(fā)軟 件。也許你需要寫一個(gè)使用擴(kuò)展語言的程序,但不想設(shè)計(jì)一個(gè)語言,并為此編寫調(diào)試一個(gè)解釋器,然后再把它 集成進(jìn)你的程序。遇到以上情況,Python可能就是你要找的語言。Python很容易上手,但它是一門真正的編程語言,提供了 比Shell多的多的結(jié)構(gòu),支持大型程序。另一方面,它提供了比C更多的錯(cuò)誤檢查,并且,做為一門高級語言, 它擁有內(nèi)置的高級數(shù)據(jù)類型,例如可變數(shù)組和字典,如果通過C來實(shí)現(xiàn)的話,這些工作可能讓你大干上幾天的 時(shí)間。因?yàn)閾碛懈嗟耐ㄓ脭?shù)據(jù)類型,Python適合比Awk甚至Perl更廣泛的問題領(lǐng)域,在其它的很多領(lǐng) 域,Python至少比別的語言要易用得多。Python可以讓你把自己的程序分隔成不同的模塊,這樣就可以在其它的Python程序中重用。這樣你就可以讓自 己的程序基于一個(gè)很大的標(biāo)準(zhǔn)模塊集或者用它們做為示例來學(xué)習(xí)Python編程。Python中集成了一些類似文 件I/O,系統(tǒng)調(diào)用,sockets,甚至像Tk這樣的用戶圖形接口。Python是一門解釋型語言,因?yàn)椴恍枰幾g和鏈接的時(shí)間,它可以幫你省下一些開發(fā)時(shí)間。解釋器可以交互式 使用,這樣就可以很方便的測試語言中的各種功能,以便于編寫發(fā)布用的程序,或者進(jìn)行自下而上的開發(fā)。還 可以當(dāng)它是一個(gè)隨手可用的計(jì)算器。Python可以寫出很緊湊和可讀性很強(qiáng)的程序。用Python寫的程序通常比同樣的C或C+程序要短得多,這是因?yàn)?以下幾個(gè)原因:高級數(shù)據(jù)結(jié)構(gòu)使你可以在一個(gè)單獨(dú)的語句中表達(dá)出很復(fù)雜的操作;語句的組織依賴于縮進(jìn)而不是begin/end塊;不需要變量或參數(shù)聲明。Python是可執(zhí)行的:如果你會用C語言寫程序,那就可以很容易的為解釋器添加新的集成模塊和功能,或者優(yōu) 化瓶頸,使其達(dá)到最大速度,或者使Python能夠鏈接到所需的二進(jìn)制架構(gòu)上(比如某個(gè)專用的商業(yè)圖形庫)。 等你真正熟悉這一切了,你就可以把Python集成進(jìn)由C寫成的程序,把Python當(dāng)做這個(gè)程序的擴(kuò)展或命令行語 言。順便說一下,這個(gè)語言的名字來源于BBC的“Monty Pythons Flying Circus”節(jié)目,和兇猛的爬蟲沒有任何關(guān) 系。在文檔中引用Monty Python典故不僅是允許的,而且還受到鼓勵(lì)!file:/Users/moon/Incoming/py//Manual/Python/tut/node3.html09-5-21 08:01:06現(xiàn)在你已經(jīng)了解了Python中所有激動人心的東西,大概你想仔細(xì)的試試它了。學(xué)習(xí)一門語言最好的辦法就是使用它,你會很樂于這樣做。下一節(jié)中,我們會很機(jī)械的說明解釋器的用法。這沒有什么神秘的,不過有助于我們練習(xí)后面展示的例子。 本指南其它部分通過例子介紹了Python語言和系統(tǒng)的各種功能,開始是簡單表達(dá)式、語法和數(shù)據(jù)類型,接下來是函數(shù)和模塊,最后是諸如異常和自定義類這樣的高級內(nèi)容。Python 指南向前:目錄 向上:Python 指南 向后:2. 使用 PythonRelease 2.3, documentation updated on July 29, 2003.See About this document. for information on suggesting changes.Python中文社區(qū)2. 使用Python解釋器file:/Users/moon/Incoming/py//Manual/Python/tut/node4.html09-5-21 08:01:08Python中文社區(qū)Python 手冊向前:1. 開胃菜 向上:Python 手冊 Next: 3. 非正式入門指導(dǎo)子目錄2.1 調(diào)用解釋器2.1.1 參數(shù)傳遞2.1.2 交互模式2.2 解釋器和它的環(huán)境2.2.1 錯(cuò)誤處理2.2.2 執(zhí)行Python腳本2.2.3 源程序編碼2.2.4 交互環(huán)境的啟動文件2. 使用Python解釋器2.1 調(diào)用解釋器通常Python的解釋器被安裝在目標(biāo)機(jī)器的 /usr/local/bin/python 目錄下;把 /usr/local/bin 目錄放進(jìn)你的UNIX Shell 的搜索路徑里,確保它可以通過輸入python來啟動。因?yàn)榘惭b路徑是可選的,所以也有可能安裝在其它位置,你可以與安裝Python的用戶或系統(tǒng)管理員聯(lián) 系。(例如,/usr/local/python就是一個(gè)很常見的選擇)輸入一個(gè)文件結(jié)束符(UNIX上是Ctrl+D,Windwos上是Ctrl+Z)解釋器會以0值退出(就是說,沒有什么錯(cuò) 誤,正常退出譯者)。如果這沒有起作用,你可以輸入以下命令退出:“import sys; sys.exit()”。解釋器的行編輯功能并不很復(fù)雜。裝在Unix上的解釋器可能會有GNU readline 庫支持,這樣就可以額外得到精 巧的交互編輯和歷史記錄功能。可能檢查命令行編輯器支持能力最方便的方式是在主提示符下輸入Ctrl+P。如果有嘟嘟聲(計(jì)算機(jī)揚(yáng)聲器),說明你可以使用命令行編輯功能,從附錄 A 可以查到快捷鍵的介紹。如果什么也沒有發(fā)聲,或者P顯示了出來,說明命令行編輯功能不可用,你只有用退格鍵刪掉輸入的命令了。解釋器的操作有些像Unix Shell:使用終端設(shè)備做為標(biāo)準(zhǔn)輸入來調(diào)用它時(shí),解釋器交互的解讀和執(zhí)行命令,通過 文件名參數(shù)或以文件做為標(biāo)準(zhǔn)輸入設(shè)備時(shí),它從文件中解讀并執(zhí)行腳本。啟動解釋器的第三個(gè)方法是“python -c command arg .”,這種方法可以在命令行中直接執(zhí)行語句,等同 于Shell的 -c選項(xiàng)。因?yàn)镻ython語句通常會包括空格之類的特殊字符,所以最好把整個(gè)語句用雙引號包起來。注意“python file”和“python ”);繼續(xù)的部分被稱為從屬提示符,由三個(gè)點(diǎn)標(biāo)識(“. ”)。在第一行之前,解釋器打 印歡迎信息、版本號和授權(quán)提示:pythonPython 2.3 (#1, Jul 30 2003, 23:22:59) GCC 3.2 20020927 (prerelease) on cygwinType help, copyright, credits or license for more information.輸入多行結(jié)構(gòu)時(shí)需要從屬提示符了,例如,下面這個(gè) if 語句: the_world_is_flat = 1 if the_world_is_flat:. print Be careful not to fall off!.Be careful not to fall off!2.2 解釋器及其環(huán)境2.2.1 錯(cuò)誤處理有錯(cuò)誤發(fā)生時(shí),解釋器打印一個(gè)錯(cuò)誤信息和棧跟蹤(監(jiān)視)器?。交互模式下,它返回主提示符,如果從文件 輸入執(zhí)行,它在打印棧跟蹤器后以非零狀態(tài)退出。(異常可以由try語句中的except子句來控制,這樣就不會出 現(xiàn)上文中的錯(cuò)誤信息) 有一些非常致命的錯(cuò)誤會導(dǎo)致非零狀態(tài)下退出,這由通常由內(nèi)部矛盾和內(nèi)存溢出造成。 所有的錯(cuò)誤信息都寫入標(biāo)準(zhǔn)錯(cuò)誤流;命令中執(zhí)行的普通輸出寫入標(biāo)準(zhǔn)輸出。在主提示符或附屬提示符輸入中斷符(通常是Control-C or DEL)就會取消當(dāng)前輸入,回到主命令行。2.1執(zhí)行 命令時(shí)輸入一個(gè)中斷符會拋出一個(gè) KeyboardInterrupt 異常,它可以被try句截獲。2.2.2 執(zhí)行Python腳本BSD系統(tǒng)中,Python腳本可以像Shell腳本那樣直接執(zhí)行,只要在腳本文件開頭寫一行命令,指定文件和模式:#! /usr/bin/env python(將用戶路徑通知解釋器) “#!”必須是文件的前兩個(gè)字符,在某些平臺上,第一行必須以Unix風(fēng)格的行結(jié)束符(“n”)結(jié)束,不能用Mac(“r”)或Windows(“rn”)的結(jié)束符。注意,“#”是Python中是行注釋的起始符。腳本可以通過 chmod 命令指定執(zhí)行模式和許可權(quán)。$ chmod +x myscript.py2.2.3 源程序編碼Python的源文件可以通過編碼使用 ASCII 以外的字符集。 最好的做法是在 #! 行后面用一個(gè)特殊的注釋行來定 義字符集。# -*- coding: iso-8859-1 -*-根據(jù)這個(gè)聲明,Python會將文件中的字符盡可能的從指定的編碼轉(zhuǎn)為Unicode,在本例中,這個(gè)字符集是 iso-8859-1 。在 Python 庫參考手冊 中可以找到可用的編碼列表(根據(jù)我的實(shí)驗(yàn),中文似乎只能用cp-936或utf-8,不直接支持GB,GBK,GB-18030或ISO-10646譯者注)。如果你的文件編輯器支持UTF-8格式,并且可以保存UTF-8標(biāo)記(aka BOM - Byte Order Mark),你可以用這 個(gè)來代替編碼聲明(看來至少Jext還不支持這樣做,而Vim,我還沒找到它的編碼設(shè)置在哪里,還是老老實(shí)實(shí) 的用注釋行指定源代碼的編碼吧譯者注)。IDLE可以通過設(shè)定Options/General/Default Source Encoding/UTF-8 來支持它。需要注意的是舊版Python不支持這個(gè)標(biāo)記(Python 2.2或更早的版本),也同樣不 能使操作系統(tǒng)支持#!文件。使用UTF-8內(nèi)碼(無論是用標(biāo)記還是編碼聲明),我們可以在字符串和注釋中使用世界上的大部分語言。標(biāo)識 符中不能使用非 ASCII 字符集。為了正確顯示所有的字符,你一定要在編輯器中將文件保存為UTF-8格式,而 且要使用支持文件中所有字符的字體。2.2.4 交互式環(huán)境的啟動文件使用Python解釋器的時(shí)候,我們可能需要在每次解釋器啟動時(shí)執(zhí)行一些命令。你可以在一個(gè)文件中包含你想要執(zhí)行的命令,設(shè)定一個(gè)名為PYTHONSTARTUP 的環(huán)境變量來指定這個(gè)文件。這類似于Unix shell的.profile文件。這個(gè)文件在交互會話期是只讀的,當(dāng)Python從腳本中解讀文件或以終端做為外部命令源時(shí)則不會如此(盡管它 們的行為很像是處在交互會話期。)它與解釋器執(zhí)行的命令處在同一個(gè)命名空間,所以由它定義或引用的一切 可以在解釋器中不受限制的使用。你也可以在這個(gè)文件中改變sys.ps1和sys.ps2指令。如果你想要在當(dāng)前目錄中執(zhí)行附加的啟動文件,你可以在全局啟動文件中加入類似以下的代碼:“if os.path.isfile(.pythonrc.py): execfile(.pythonrc.py)”。 如果你想要在某個(gè)腳本中使用啟動文件,必須要在腳本中 寫入這樣的語句:import osfilename = os.environ.get(PYTHONSTARTUP)if filename and os.path.isfile(filename):execfile(filename)腳注. 注:2.1GNU readline包的一個(gè)錯(cuò)誤可能會造成無法正常工作。Python 手冊向前:1. 開胃菜 向上:Python 手冊 Next: 3. 非正式入門指導(dǎo)Release 2.3, documentation updated on July 29, 2003.See About this document. for information on suggesting changes.Python中文社區(qū)3. 初步認(rèn)識Pythonfile:/Users/moon/Incoming/py//Manual/Python/tut/node5.html09-5-21 08:01:11Python中文社區(qū)Python 手冊向前:2. 使用Python解釋器 向上:Python 手冊 向后: 4. 深入編程子目錄3.1 初步認(rèn)識Python3.1.1 數(shù)值3.1.2 字符串3.1.3 Unicode 字符串3.1.4 鏈表3.2 開始編程3. Python的非正式介紹在后面的例子中,區(qū)分輸入和輸出的方法是看是否有提示符(“ ”和“. ”):想要重復(fù)這些例子的話,你 就要在提示符顯示后輸入所有的一切;沒有以提示符開始的行,是解釋器輸出的信息。需要注意的是示例中的 從屬提示符用于多行命令的結(jié)束,它表示你需要輸入一個(gè)空行。本手冊中的很多示例都包括注釋,甚至有一些在交互提示符中折行。Python中的注釋以符號“#”起始,一直到 當(dāng)前行的結(jié)尾。注釋可能出現(xiàn)在一行的開始,也可能跟在空格或程序代碼之后,但不會出現(xiàn)在字符串中,字符 串中的#號只代表#號。示例:# this is the first commentSPAM = 1 # and this is the second comment# . and now a third! STRING = # This is not a comment.3.1 初步認(rèn)識Python讓我們試驗(yàn)一些簡單的Python命令。啟動解釋器然后等待主提示符“ ”出現(xiàn)(這用不了太久)。3.1.1 數(shù)值解釋器的行為就像是一個(gè)計(jì)算器。你可以向它輸入一個(gè)表達(dá)式,它會返回結(jié)果。表達(dá)式的語法簡明易 懂:+,-,*,/和大多數(shù)語言中的用法一樣(比如C或Pascal),括號用于分組。例如: 2+24 # This is a comment. 2+24 2+2 # and a comment on the same line as code4 (50-5*6)/45 # Integer division returns the floor:. 7/32 7/-3-3像c一樣,等號(“=”)用于給變量賦值。被分配的值是只讀的。 width = 20 height = 5*9 width * height900同一個(gè)值可以同時(shí)賦給幾個(gè)變量: x = y = z = 0 # Zero x, y and z x0 y0 z0Python完全支持浮點(diǎn)數(shù),不同類型的操作數(shù)混在一起時(shí),操作符會把整型轉(zhuǎn)化為浮點(diǎn)數(shù)。 3 * 3.75 / 1.57.5 7.0 / 23.5復(fù)數(shù)也同樣得到了支持,虛部由一個(gè)后綴“j”或者“J”來表示。帶有非零實(shí)部的復(fù)數(shù)記為“(real+imagj)”,或 者也可以通過“complex(real, imag)”函數(shù)創(chuàng)建。 1j * 1J (-1+0j) 1j * complex(0,1) (-1+0j) 3+1j*3 (3+3j) (3+1j)*3 (9+3j) (1+2j)/(1+1j) (1.5+0.5j)復(fù)數(shù)總是由實(shí)部和虛部兩部分浮點(diǎn)數(shù)來表示。可能從 z.real 和 z.imag 得到復(fù)數(shù)z的實(shí)部和虛部。 a=1.5+0.5j a.real1.5 a.imag0.5用于向浮點(diǎn)數(shù)和整型轉(zhuǎn)化的函數(shù)(float(), int() 和 long())不能對復(fù)數(shù)起作用沒有什么方法可以將復(fù)數(shù) 轉(zhuǎn)化為實(shí)數(shù)。可以使用abs(z)取得它的模,也可以通過z.real得到它的實(shí)部。 a=3.0+4.0j float(a)Traceback (most recent call last): File , line 1, in ?TypeError: cant convert complex to float; use e.g. abs(z) a.real3.0 a.imag4.0 abs(a) # sqrt(a.real*2 + a.imag*2)5.0交互模式下,最近一次表達(dá)式輸出保存在_變量中。這意味著把Python當(dāng)做桌面計(jì)算器使用時(shí),它可以更容易 的進(jìn)行連續(xù)計(jì)算,例如: tax = 12.5 / 100 price = 100.50 price * tax12.5625 price + _113.0625 round(_, 2)113.06這個(gè)變量對于用戶來說是只讀的。不要試圖去給它賦值由于Python的語法效果,你只會創(chuàng)建一個(gè)同名的局 部變量覆蓋它。3.1.2 字符串除了數(shù)值,Python還可以通過幾種不同的方法操作字符串。字符串用單引號或雙引號標(biāo)識: spam eggsspam eggs doesnt doesnt doesnt doesnt Yes, he said.Yes, he said. Yes, he said.Yes, he said. Isnt, she said.Isnt, she said.字符串可以通過幾種方式分行??梢栽谛屑臃葱备茏鰹槔^續(xù)符,這表示下一行是當(dāng)前行的邏輯沿續(xù)。hello = This is a rather long string containingnseveral lines of text just as you would do in C.nNote that whitespace at the beginning of the line issignificant.print hello注意換行用 n 來表示;反斜杠后面的新行標(biāo)識(newline,縮寫“n”)會轉(zhuǎn)換為換行符,示例會按如下格式打 ?。篢his is a rather long string containingseveral lines of text just as you would do in C.Note that whitespace at the beginning of the line is significant.然而,如果我們創(chuàng)建一個(gè)“raw”行,n序列就不會轉(zhuǎn)為換行,示例源碼最后的反斜杠和換行符n都會做為字符 串中的數(shù)據(jù)處理。如下所示:hello = rThis is a rather long string containingnseveral lines of text much as you would do in C.print hello會打印為:This is a rather long string containingnseveral lines of text much as you would do in C.或者,字符串可以用一對三重引號”或來標(biāo)識。三重引號中的字符串在行尾不需要換行標(biāo)記,所有的格 式都會包括在字符串中。print Usage: thingy OPTIONS-h Display this usage message-H hostname Hostname to connect toproduces the following output:Usage: thingy OPTIONS-h Display this usage message-H hostname Hostname to connect to解釋器打印出來的字符串與它們輸入的形式完全相同:內(nèi)部的引號,用反斜杠標(biāo)識的引號和各種怪字符,都精 確的顯示出來 。如果字符串中包含單引號,不包含雙引號,可以用雙引號引用它,反之可以用單引號。(后面 介紹的print語句,可以可以用來寫沒有引號和反斜杠的字符串)。字符串可以用+號聯(lián)接(或者說粘合),也可以用*號循環(huán)。 word = Help + A wordHelpA 兩個(gè)字符串值之間的聯(lián)接是自動的,上例第一行可以寫成“word = Help A”這種方式只對字符串值有效,任 何字符串表達(dá)式都不適用這種方法。 import string str ing# string.strip(str)+ ing# string.strip(str)ing#-This is invalidFile , line 1, in ?string.strip(str) ingSyntaxError: invalid syntax字符串可以用下標(biāo)(索引)查詢;就像C一樣,字符串的第一個(gè)字符下標(biāo)是0。這里沒有獨(dú)立的字符類型,字符 僅僅是大小為一的字符串。就像在Icon中那樣,字符串的子串可以通過切片標(biāo)志來表示:兩個(gè)由冒號隔開的索 引。 word4A word0:2He word2:4lp切片索引可以使用默認(rèn)值;省略前一個(gè)索引表示0,省略后一個(gè)索引表示被切片的字符串的長度。 word:2 # The first two charactersHe word2: # All but the first two characterslpA和C字符串不同,Python字符串不能改寫。按字符串索引賦值會產(chǎn)生錯(cuò)誤。 word0 = xTraceback (most recent call last): File , line 1, in ?TypeError: object doesnt support item assignment word:1 = SplatTraceback (most recent call last): File , line 1, in ?TypeError: object doesnt support slice assignment然而,可以通過簡單有效的組合方式生成新的字符串: x + word1:xelpA Splat + word4SplatA切片操作有一個(gè)很有用的不變性: s:i + si: 等于s。 word:2 + word2:HelpA word:3 + word3:HelpA退化的切片索引被處理的很優(yōu)美:過大的索引代替為字符串大小,下界比上界大的返回空字符串。 word1:100elpA word10: word2:1索引可以是負(fù)數(shù),計(jì)數(shù)從右邊開始,例如: word-1 # The last characterA word-2 # The last-but-one characterp word-2: # The last two characterspA word:-2 # All but the last two charactersHel不過-0還是0,所以它不是從右邊計(jì)數(shù)的! word-0 # (since -0 equals 0)H越界的負(fù)切片索引會被截?cái)?,不過不要嘗試在前元素索引(非切片的)中這樣做: word-100:HelpA word-10 # errorTraceback (most recent call last): File , line 1, in ?IndexError: string index out of range理解切片的最好方式是把索引視為兩個(gè)字符之間的點(diǎn),第一個(gè)字符的左邊是0,字符串中第n個(gè)字符的右邊是索 引n,例如:+-+-+-+-+-+| H | e | l | p | A |+-+-+-+-+-+0 1 2 3 4 5-5 -4 -3 -2 -1第一行是字符串中給定的0到5各個(gè)索引的位置,第二行是對應(yīng)的負(fù)索引。從i到j(luò)的切片由這兩個(gè)標(biāo)志之間的字 符組成。對于非負(fù)索引,切片長度就是兩索引的差。例如,word1:3的長度是2。 內(nèi)置函數(shù) len() 返回字符串長度: s = supercalifragilisticexpialidocious len(s)343.1.3 Unicode 字符串從Python2.0開始,程序員們可以使用一種新的數(shù)據(jù)類型來存儲文本數(shù)據(jù):Unicode 對象。它可以用于存儲多 種Unicode數(shù)據(jù)(請參閱 / ),并且,通過必要時(shí)的自動轉(zhuǎn)換,它可以與現(xiàn)有的字符串 對象良好的結(jié)合。Unicode針對現(xiàn)代和舊式的文本中所有的字符提供了一個(gè)序列。 以前,字符只能使用256個(gè)序號,文本通常通過 綁定代碼頁來與字符映射。這很容易導(dǎo)致混亂,特別是軟件的國際化(internationalization通常寫 做“i18n”“i”+18 characters +“n”)。Unicode通過為所有字符定義一個(gè)統(tǒng)一的代碼頁解決了這個(gè)問 題。Python中定義一個(gè)Unicode字符串和定義一個(gè)普通字符串一樣簡單: uHello World ! uHello World !引號前小寫的“u”表示這里創(chuàng)建的是一個(gè)Unicode字符串。如果你想加入一個(gè)特殊字符,可以使用Python的Unicode-Escape 編碼。如下例所示: uHellou0020World ! uHello World !被替換的 u0020 標(biāo)識表示在給定位置插入編碼值為 0x0020 的 Unicode字符(空格符)。 其它字符也會被直接解釋成對應(yīng)的Unicode碼。如果你有一個(gè)在西方國家常用的Latin-1編碼字符串,你可以發(fā)現(xiàn)Unicode字符集的前256個(gè)字符與Lation-1的對應(yīng)字符編碼完全相同。另外,有一種與普通字符串相同的行模式。想要使用Python的Raw-Unicode-Escape 編碼,你需要在字符串的引 號前加上 ur 前綴。如果在小寫“u”前可能有不止一個(gè)反斜杠,它只會把那些單獨(dú)的 uXXXX 轉(zhuǎn)化為Unicode字 符。 urHellou0020World ! uHello World ! urHellou0020World ! uHellou0020World !行模式在你需要輸入很多個(gè)反斜杠時(shí)很有用,可能會用于正規(guī)表達(dá)式。 作為這些編碼標(biāo)準(zhǔn)的一部分,Python提供了一個(gè)完備的方法集用于從已知的編碼集創(chuàng)建Unicode字符串。 內(nèi)置函數(shù)unicode() 提供了訪問(編碼和解碼)所有已注冊的Unicode編碼的方法。它能轉(zhuǎn)換眾所周知的 Latin-1,ASCII, UTF-8, 和 UTF-16。后面的兩個(gè)可變長編碼字符集用一個(gè)或多個(gè)byte存儲Unicode字符。 默認(rèn)的字符集是 ASCII ,它只處理0到127的編碼,拒絕其它的字符并返回一個(gè)錯(cuò)誤。當(dāng)一個(gè)Unicode字符串被打印、寫入文件或通過str()轉(zhuǎn)化時(shí),它們被替換為默認(rèn)的編碼。 uabc uabc str(uabc)abc u uxe4xf6xfc str(u)Traceback (most recent call last): File , line 1, in ?UnicodeEncodeError: ascii codec cant encode characters in position 0-2: ordinal not in range(128)要把一個(gè)Unicode字符串用指定的字符集轉(zhuǎn)化成8位字符串,可以使用Unicode對象提供的encode()方法,它有一 個(gè)參數(shù)用以指定編碼名稱。編碼名稱小寫。 u.encode(utf-8)xc3xa4xc3xb6xc3xbc如果你有一個(gè)特定編碼的字符串,想要把它轉(zhuǎn)為Unicode字符集,可以使用uncode()函數(shù),它以編碼名做為第 二個(gè)參數(shù)。 unicode(xc3xa4xc3xb6xc3xbc, utf-8)uxe4xf6xfc3.1.4 鏈表Python 已經(jīng)有了幾個(gè)復(fù)合數(shù)據(jù)類型,用于組織其它的值。最通用的是鏈表,它寫為中括之間用逗號分隔的一列 值(子項(xiàng)),鏈表的子項(xiàng)不一定是同一類型的值。 a = spam, eggs, 100, 1234 aspam, eggs, 100, 1234像字符串一樣,鏈表也以零開始,可以被切片,聯(lián)接,等等: a0spam a31234 a-2100 a1:-1 eggs, 100 a:2 + bacon, 2*2 spam, eggs, bacon, 4 3*a:3 + Boe!spam, eggs, 100, spam, eggs, 100, spam, eggs, 100, Boe!與不變的字符串不同,鏈表可以改變每個(gè)獨(dú)立元素的值: aspam, eggs, 100, 1234 a2 = a2 + 23 aspam, eggs, 123, 1234可以進(jìn)行切片操作,甚至還可以改變鏈表的大小: # Replace some items:. a0:2 = 1, 12 a1, 12, 123, 1234 # Remove some:. a0:2 = a123, 1234 # Insert some:. a1:1 = bletch, xyzzy a123, bletch, xyzzy, 1234

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論