Python 基礎(chǔ)語(yǔ)法.doc
《Python 基礎(chǔ)語(yǔ)法.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《Python 基礎(chǔ)語(yǔ)法.doc(24頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
Python的特點(diǎn) 1. 簡(jiǎn)單 Python是一種代表簡(jiǎn)單思想的語(yǔ)言。 2. 易學(xué) Python有極其簡(jiǎn)單的語(yǔ)法。 3. 免費(fèi)、開(kāi)源 Python是FLOSS(自由/開(kāi)放源碼軟件)之一。 4. 高層語(yǔ)言 使用Python編寫(xiě)程序時(shí)無(wú)需考慮如何管理程序使用的內(nèi)存一類的底層細(xì)節(jié)。 5. 可移植性 Python已被移植到很多平臺(tái),這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、 BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、 Windows CE甚至還有PocketPC。 6. 解釋性 可以直接從源代碼運(yùn)行。在計(jì)算機(jī)內(nèi)部,python解釋器把源代碼轉(zhuǎn)換為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言。 7. 面向?qū)ο? Python既支持面向過(guò)程編程也支持面向?qū)ο缶幊獭? 8. 可擴(kuò)展性 部分程序可以使用其他語(yǔ)言編寫(xiě),如c/c++。 9. 可嵌入型 可以把Python嵌入到c/c++程序中,從而提供腳本功能。 10. 豐富的庫(kù) Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、 電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。 ---------------分割線------------------------以下是Python的基本語(yǔ)法--------------------------------------------------------- 一、基本概念 1. python中數(shù)有四種類型:整數(shù)、長(zhǎng)整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)。 整數(shù), 如 1 長(zhǎng)整數(shù) 是比較大的整數(shù) 浮點(diǎn)數(shù) 如 1.23、3E-2 復(fù)數(shù) 如 1 + 2j、 1.1 + 2.2j 2. 字符串(字符的序列) python中單引號(hào)和雙引號(hào)使用完全相同。 使用三引號(hào)('''或""")可以指定一個(gè)多行字符串。 轉(zhuǎn)義符 '\' 自然字符串, 通過(guò)在字符串前加r或R。 如 r"this is a line with \n" 則\n會(huì)顯示,并不是換行。 python允許處理unicode字符串,加前綴u或U, 如 u"this is an unicode string"。 字符串是不可變的。 按字面意義級(jí)聯(lián)字符串,如"this " "is " "string"會(huì)被自動(dòng)轉(zhuǎn)換為this is string。 3. 標(biāo)識(shí)符的命名 第一個(gè)字符必須是字母表中字母或下劃線'_'。 標(biāo)識(shí)符的其他的部分有字母、數(shù)字和下劃線組成。 標(biāo)識(shí)符對(duì)大小寫(xiě)敏感。 4. 對(duì)象 python程序中用到的任何“東西”都成為“對(duì)象”。 5. 邏輯行和物理行 物理行是我們?cè)诰帉?xiě)程序時(shí)看到的,邏輯行則是python看到的。 python中分號(hào);標(biāo)識(shí)一個(gè)邏輯行的結(jié)束,但是實(shí)際中一般每個(gè)物理行只寫(xiě)一個(gè)邏輯行,可以避免使用分號(hào)。 多個(gè)物理行中可以寫(xiě)一個(gè)邏輯行,如下: s = "peter is \ writing this article" 上面\的使用被稱為‘明確的行連接’, 又如: print \ "peter" 6. 縮進(jìn) 空白在python是非常重要的,行首的空白是最重要的,又稱為縮進(jìn)。行首的空白(空格和制表符)用來(lái)決定邏輯行的縮進(jìn)層次,從而決定語(yǔ)句 分組。這意味著同一層次的語(yǔ)句必須有相同的縮進(jìn),每一組這樣的語(yǔ)句稱為一個(gè)塊。 注意:不要混合使用空格和制表符來(lái)縮進(jìn),因?yàn)樵诳缭讲煌钠脚_(tái)時(shí)無(wú)法正常工作。 二、運(yùn)算符與表達(dá)式 1. 運(yùn)算符與其用法 運(yùn)算符 名稱 說(shuō)明 例子 + 加 兩個(gè)對(duì)象相加 3 + 5得到8。'a' + 'b'得到'ab'。 - 減 得到負(fù)數(shù)或是一個(gè)數(shù)減去另一個(gè)數(shù) -5.2得到一個(gè)負(fù)數(shù)。50 - 24得到26。 * 乘 兩個(gè)數(shù)相乘或是返回一個(gè)被重復(fù)若干次的字符串 2 * 3得到6。'la' * 3得到'lalala'。 ** 冪 返回x的y次冪 3 ** 4得到81(即3 * 3 * 3 * 3) / 除 x除以y 4/3得到1(整數(shù)的除法得到整數(shù)結(jié)果)。4.0/3或4/3.0得到1.3333333333333333 // 取整除 返回商的整數(shù)部分 4 // 3.0得到1.0 % 取模 返回除法的余數(shù) 8%3得到2。-25.5%2.25得到1.5 << 左移 把一個(gè)數(shù)的比特向左移一定數(shù)目(每個(gè)數(shù)在內(nèi)存中都表示為比特或二進(jìn)制數(shù)字,即0和1) 2 << 2得到8?!?按比特表示為10 >> 右移 把一個(gè)數(shù)的比特向右移一定數(shù)目 11 >> 1得到5?!?1按比特表示為1011,向右移動(dòng)1比特后得到101,即十進(jìn)制的5。 & 按位與 數(shù)的按位與 5 & 3得到1。 | 按位或 數(shù)的按位或 5 | 3得到7。 ^ 按位異或 數(shù)的按位異或 5 ^ 3得到6 ~ 按位翻轉(zhuǎn) x的按位翻轉(zhuǎn)是-(x+1) ~5得到6。 < 小于 返回x是否小于y。所有比較運(yùn)算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價(jià)。注意,這些變量名的大寫(xiě)。 5 < 3返回0(即False)而3 < 5返回1(即True)。比較可以被任意連接:3 < 5 < 7返回True。 > 大于 返回x是否大于y 5 > 3返回True。如果兩個(gè)操作數(shù)都是數(shù)字,它們首先被轉(zhuǎn)換為一個(gè)共同的類型。否則,它總是返回False。 <= 小于等于 返回x是否小于等于y x = 3; y = 6; x <= y返回True。 >= 大于等于 返回x是否大于等于y x = 4; y = 3; x >= y返回True。 == 等于 比較對(duì)象是否相等 x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。 != 不等于 比較兩個(gè)對(duì)象是否不相等 x = 2; y = 3; x != y返回True。 not 布爾“非” 如果x為T(mén)rue,返回False。如果x為False,它返回True。 x = True; not y返回False。 and 布爾“與” 如果x為False,x and y返回False,否則它返回y的計(jì)算值。 x = False; y = True; x and y,由于x是False,返回False。在這里,Python不會(huì)計(jì)算y,因?yàn)樗肋@個(gè)表達(dá)式的值肯定是False(因?yàn)閤是False)。這個(gè)現(xiàn)象稱為短路計(jì)算。 or 布爾“或” 如果x是True,它返回True,否則它返回y的計(jì)算值。 x = True; y = False; x or y返回True。短路計(jì)算在這里也適用。 2. 運(yùn)算符優(yōu)先級(jí)(從低到高) 運(yùn)算符 描述 lambda Lambda表達(dá)式 or 布爾“或” and 布爾“與” not x 布爾“非” in,not in 成員測(cè)試 is,is not 同一性測(cè)試 <,<=,>,>=,!=,== 比較 | 按位或 ^ 按位異或 & 按位與 <<,>> 移位 +,- 加法與減法 *,/,% 乘法、除法與取余 +x,-x 正負(fù)號(hào) ~x 按位翻轉(zhuǎn) ** 指數(shù) x.attribute 屬性參考 x[index] 下標(biāo) x[index:index] 尋址段 f(arguments...) 函數(shù)調(diào)用 (experession,...) 綁定或元組顯示 [expression,...] 列表顯示 {key:datum,...} 字典顯示 'expression,...' 字符串轉(zhuǎn)換 3. python 控制臺(tái)輸出 使用print print "abc" #打印abc并換行 print "abc%s" % "d" #打印abcd print "abc%sef%s" % ("d", "g") #打印abcdefg 三、控制流 1. if 語(yǔ)句 i = 10 n = int(raw_input("enter a number:")) if n == i: print "equal" elif n < i: print "lower" else: print "higher" 2. while語(yǔ)句 while True: pass else: pass #else語(yǔ)句可選,當(dāng)while為False時(shí),else語(yǔ)句被執(zhí)行。 pass是空語(yǔ)句。 3. for 循環(huán) for..in for i in range(0, 5): print i else: pass # 打印0到4 注:當(dāng)for循環(huán)結(jié)束后執(zhí)行else語(yǔ)句; range(a, b)返回一個(gè)序列,從a開(kāi)始到b為止,但不包括b,range默認(rèn)步長(zhǎng)為1,可以指定步長(zhǎng),range(0,10,2); 4. break語(yǔ)句 終止循環(huán)語(yǔ)句,如果從for或while中終止,任何對(duì)應(yīng)循環(huán)的else將不執(zhí)行。 5. continue語(yǔ)句 continue語(yǔ)句用來(lái)調(diào)過(guò)當(dāng)前循環(huán)的剩余語(yǔ)句,然后繼續(xù)下一輪循環(huán)。 四、函數(shù) 函數(shù)通過(guò)def定義。def關(guān)鍵字后跟函數(shù)的標(biāo)識(shí)符名稱,然后跟一對(duì)圓括號(hào),括號(hào)之內(nèi)可以包含一些變量名,該行以冒號(hào)結(jié)尾;接下來(lái)是一塊語(yǔ)句,即函數(shù)體。 def sumOf(a, b): return a + b 1. 函數(shù)形參 函數(shù)中的參數(shù)名稱為‘形參’,調(diào)用函數(shù)時(shí)傳遞的值為‘實(shí)參’ 2. 局部變量 在函數(shù)內(nèi)定義的變量與函數(shù)外具有相同名稱的其他變量沒(méi)有任何關(guān)系,即變量名稱對(duì)于函數(shù)來(lái)說(shuō)是局部的。這稱為變量的作用域。 global語(yǔ)句, 為定義在函數(shù)外的變量賦值時(shí)使用global語(yǔ)句。 def func(): global x print "x is ", x x = 1 x = 3 func() print x #3 #1 3. 默認(rèn)參數(shù) 通過(guò)使用默認(rèn)參數(shù)可以使函數(shù)的一些參數(shù)是‘可選的’。 def say(msg, times = 1): print msg * times say("peter") say("peter", 3) 注意:只有在形參表末尾的那些參數(shù)可以有默認(rèn)參數(shù)值,即不能在聲明函數(shù)形參的時(shí)候,先聲明有默認(rèn)值的形參而后聲明沒(méi)有默認(rèn)值的形參,只是因?yàn)橘x給形參的值是根據(jù)位置而賦值的。 4. 關(guān)鍵參數(shù) 如果某個(gè)函數(shù)有很多參數(shù),而現(xiàn)在只想指定其中的部分,那么可以通過(guò)命名為這些參數(shù)賦值(稱為‘關(guān)鍵參數(shù)’)。 優(yōu)點(diǎn):不必?fù)?dān)心參數(shù)的順序,使函數(shù)變的更加簡(jiǎn)單;假設(shè)其他參數(shù)都有默認(rèn)值,可以只給我們想要的那些參數(shù)賦值。 def func(a, b=2, c=3): print "a is %s, b is %s, c is %s" % (a, b, c) func(1) #a is 1, b is 2, c is 3 func(1, 5) #a is 1, b is 5, c is 3 func(1, c = 10) #a is 1, b is 2, c is 10 func(c = 20, a = 30) #a is 30, b is 2, c is 20 5. return 語(yǔ)句 return語(yǔ)句用來(lái)從一個(gè)函數(shù)返回,即跳出函數(shù)??蓮暮瘮?shù)返回一個(gè)值。 沒(méi)有返回值的return語(yǔ)句等價(jià)于return None。None表示沒(méi)有任何東西的特殊類型。 6. DocStrings (文檔字符串) def func(): '''This is self-defined function Do nothing''' pass print func.__doc__ #This is self-defined function # #Do nothing 五、模塊 模塊就是一個(gè)包含了所有你定義的函數(shù)和變量的文件,模塊必須以.py為擴(kuò)展名。模塊可以從其他程序中‘輸入’(import)以便利用它的功能。 在python程序中導(dǎo)入其他模塊使用'import', 所導(dǎo)入的模塊必須在sys.path所列的目錄中,因?yàn)閟ys.path第一個(gè)字符串是空串''即當(dāng)前目錄,所以程序中可導(dǎo)入當(dāng)前目錄的模塊。 1. 字節(jié)編譯的.pyc文件 導(dǎo)入模塊比較費(fèi)時(shí),python做了優(yōu)化,以便導(dǎo)入模塊更快些。一種方法是創(chuàng)建字節(jié)編譯的文件,這些文件以.pyc為擴(kuò)展名。 pyc是一種二進(jìn)制文件,是py文件經(jīng)編譯后產(chǎn)生的一種byte code,而且是跨平臺(tái)的(平臺(tái)無(wú)關(guān))字節(jié)碼,是有python虛擬機(jī)執(zhí)行的,類似于 java或.net虛擬機(jī)的概念。pyc的內(nèi)容,是跟python的版本相關(guān)的,不同版本編譯后的pyc文件是不同的。 2. from .. import 如果想直接使用其他模塊的變量或其他,而不加'模塊名+.'前綴,可以使用from .. import。 例如想直接使用sys的argv,from sys import argv 或 from sys import * 3. 模塊的__name__ 每個(gè)模塊都有一個(gè)名稱,py文件對(duì)應(yīng)模塊名默認(rèn)為py文件名,也可在py文件中為_(kāi)_name__賦值;如果是__name__,說(shuō)明這個(gè)模塊被用戶 單獨(dú)運(yùn)行。 4. dir()函數(shù) dir(sys)返回sys模塊的名稱列表;如果不提供參數(shù),即dir(),則返回當(dāng)前模塊中定義名稱列表。 del -> 刪除一個(gè)變量/名稱,del之后,該變量就不能再使用。 六、數(shù)據(jù)結(jié)構(gòu) python有三種內(nèi)建的數(shù)據(jù)結(jié)構(gòu):列表、元組和字典。 1. 列表 list是處理一組有序項(xiàng)目的數(shù)據(jù)結(jié)構(gòu),列表是可變的數(shù)據(jù)結(jié)構(gòu)。列表的項(xiàng)目包含在方括號(hào)[]中,eg: [1, 2, 3], 空列表[]。判斷列表中是否包含某項(xiàng)可以使用in, 比如 l = [1, 2, 3]; print 1 in l; #True;支持索引和切片操作;索引時(shí)若超出范圍,則IndexError;使用函數(shù)len()查看長(zhǎng)度;使用del可以刪除列表中的項(xiàng),eg: del l[0] # 如果超出范圍,則IndexError list函數(shù)如下: append(value) ---向列表尾添加項(xiàng)value l = [1, 2, 2] l.append(3) #[1, 2, 2, 3] count(value) ---返回列表中值為value的項(xiàng)的個(gè)數(shù) l = [1, 2, 2] print l.count(2) # 2 extend(list2) ---向列表尾添加列表list2 l = [1, 2, 2] l1 = [10, 20] l.extend(l1) print l #[1, 2, 2, 10, 20] index(value, [start, [stop]]) ---返回列表中第一個(gè)出現(xiàn)的值為value的索引,如果沒(méi)有,則異常 ValueError l = [1, 2, 2] a = 4 try: print l.index(a) except ValueError, ve: print "there is no %d in list" % a insert(i, value) ---向列表i位置插入項(xiàng)vlaue,如果沒(méi)有i,則添加到列表尾部 l = [1, 2, 2] l.insert(1, 100) print l #[1, 100, 2, 2] l.insert(100, 1000) print l #[1, 100, 2, 2, 1000] pop([i]) ---返回i位置項(xiàng),并從列表中刪除;如果不提供參數(shù),則刪除最后一個(gè)項(xiàng);如果提供,但是i超出索引范圍,則異常IndexError l = [0, 1, 2, 3, 4, 5] print l.pop() # 5 print l #[0, 1, 2, 3, 4] print l.pop(1) #1 print l #[0, 2, 3, 4] try: l.pop(100) except IndexError, ie: print "index out of range" remove(value) ---刪除列表中第一次出現(xiàn)的value,如果列表中沒(méi)有vlaue,則異常ValueError l = [1, 2, 3, 1, 2, 3] l.remove(2) print l #[1, 3, 1, 2, 3] try: l.remove(10) except ValueError, ve: print "there is no 10 in list" reverse() ---列表反轉(zhuǎn) l = [1, 2, 3] l.reverse() print l #[3, 2, 1] sort(cmp=None, key=None, reverse=False) ---列表排序 【Python Library Reference】 cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument: "cmp=lambda x,y: cmp(x.lower(), y.lower())" key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower" reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once. l5 = [10, 5, 20, 1, 30] l5.sort() print l5 #[1, 5, 10, 20, 30] l6 = ["bcd", "abc", "cde", "bbb"] l6.sort(cmp = lambda s1, s2: cmp(s1[0],s2[1])) print l6 #['abc', 'bbb', 'bcd', 'cde'] l7 = ["bcd", "abc", "cde", "bbb", "faf"] l7.sort(key = lambda s: s[1]) print l7 #['faf', 'abc', 'bbb', 'bcd', 'cde'] 2. 元組 tuple和list十分相似,但是tuple是不可變的,即不能修改tuple,元組通過(guò)圓括號(hào)中用逗號(hào)分割的項(xiàng)定義;支持索引和切片操作;可以使用 in 查看一個(gè)元素是否在tuple中??赵M();只含有一個(gè)元素的元組("a",) #需要加個(gè)逗號(hào) 優(yōu)點(diǎn):tuple比list速度快;對(duì)不需要修改的數(shù)據(jù)進(jìn)行‘寫(xiě)保護(hù)’,可以是代碼更安全 tuple與list可以相互轉(zhuǎn)換,使用內(nèi)置的函數(shù)list()和tuple()。 l = [1, 2, 3] print l # [1, 2, 3] t = tuple(l) print t # (1, 2, 3) l1 = list(t) print l1 #[1, 2, 3] 元組最通常的用法是用在打印語(yǔ)句,如下例: name = "Peter Zhang" age = 25 print "Name: %s; Age: %d" % (name, age) # Name: Peter Zhang; Age: 25 函數(shù)如下: count(value) ---返回元組中值為value的元素的個(gè)數(shù) t = (1, 2, 3, 1, 2, 3) print t.count(2) # 2 index(value, [start, [stop]]) ---返回列表中第一個(gè)出現(xiàn)的值為value的索引,如果沒(méi)有,則異常 ValueError t = (1, 2, 3, 1, 2, 3) print t.index(3) # 2 try: print t.index(4) except ValueError, ve: print "there is no 4 in tuple" # there is no 4 in tuple 3. 字典 字典由鍵值對(duì)組成,鍵必須是唯一的;eg: d = {key1:value1, key2:value2};空字典用{}表示;字典中的鍵值對(duì)是沒(méi)有順序的,如果想要 一個(gè)特定的順序,那么使用前需要對(duì)它們排序;d[key] = value,如果字典中已有key,則為其賦值為value,否則添加新的鍵值對(duì)key/value;使 用del d[key] 可以刪除鍵值對(duì);判斷字典中是否有某鍵,可以使用in 或 not in; d = {} d["1"] = "one" d["2"] = "two" d["3"] = "three" del d["3"] for key, value in d.items(): print "%s --> %s" % (key, value) #1 --> one #2 --> two dict函數(shù)如下: clear() ---刪除字典中所有元素 d1 = {"1":"one", "2":"two"} d1.clear() print d1 # {} copy() ---返回字典的一個(gè)副本(淺復(fù)制) d1 = {"1":"one", "2":"two"} d2 = d1.copy() print d2 #{'1': 'one', '2': 'two'} dict.fromkeys(seq,val=None) ---創(chuàng)建并返回一個(gè)新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對(duì)應(yīng)的初始值(默認(rèn)為None) l = [1, 2, 3] t = (1, 2, 3) d3 = {}.fromkeys(l) print d3 #{1: None, 2: None, 3: None} d4 = {}.fromkeys(t, "default") print d4 #{1: 'default', 2: 'default', 3: 'default'} get(key,[default]) ---返回字典dict中鍵key對(duì)應(yīng)值,如果字典中不存在此鍵,則返回default 的值(default默認(rèn)值為None) d5 = {1:"one", 2:"two", 3:"three"} print d5.get(1) #one print d5.get(5) #None print d5.get(5, "test") #test has_key(key) ---判斷字典中是否有鍵key d6 = {1:"one", 2:"two", 3:"three"} print d6.has_key(1) #True print d6.has_key(5) #False items() ---返回一個(gè)包含字典中(鍵, 值)對(duì)元組的列表 d7 = {1:"one", 2:"two", 3:"three"} for item in d7.items(): print item #(1, 'one') #(2, 'two') #(3, 'three') for key, value in d7.items(): print "%s -- %s" % (key, value) #1 -- one #2 -- two #3 -- three keys() ---返回一個(gè)包含字典中所有鍵的列表 d8 = {1:"one", 2:"two", 3:"three"} for key in d8.keys(): print key #1 #2 #3 values() ---返回一個(gè)包含字典中所有值的列表 d8 = {1:"one", 2:"two", 3:"three"} for value in d8.values(): print value #one #two #three pop(key, [default]) ---若字典中key鍵存在,刪除并返回dict[key],若不存在,且未給出default值,引發(fā)KeyError異常 d9 = {1:"one", 2:"two", 3:"three"} print d9.pop(1) #one print d9 #{2: 'two', 3: 'three'} print d9.pop(5, None) #None try: d9.pop(5) # raise KeyError except KeyError, ke: print "KeyError:", ke #KeyError:5 popitem() ---刪除任意鍵值對(duì),并返回該鍵值對(duì),如果字典為空,則產(chǎn)生異常KeyError d10 = {1:"one", 2:"two", 3:"three"} print d10.popitem() #(1, 'one') print d10 #{2: 'two', 3: 'three'} setdefault(key,[default]) ---若字典中有key,則返回vlaue值,若沒(méi)有key,則加上該key,值為default,默認(rèn)None d = {1:"one", 2:"two", 3:"three"} print d.setdefault(1) #one print d.setdefault(5) #None print d #{1: 'one', 2: 'two', 3: 'three', 5: None} print d.setdefault(6, "six") #six print d #{1: 'one', 2: 'two', 3: 'three', 5: None, 6: 'six'} update(dict2) ---把dict2的元素加入到dict中去,鍵字重復(fù)時(shí)會(huì)覆蓋dict中的鍵值 d = {1:"one", 2:"two", 3:"three"} d2 = {1:"first", 4:"forth"} d.update(d2) print d #{1: 'first', 2: 'two', 3: 'three', 4: 'forth'} viewitems() ---返回一個(gè)view對(duì)象,(key, value)pair的列表,類似于視圖。優(yōu)點(diǎn)是,如果字典發(fā)生變化,view會(huì)同步發(fā)生變化。在 迭代過(guò)程中,字典不允許改變,否則會(huì)報(bào)異常 d = {1:"one", 2:"two", 3:"three"} for key, value in d.viewitems(): print "%s - %s" % (key, value) #1 - one #2 - two #3 - three viewkeys() ---返回一個(gè)view對(duì)象,key的列表 d = {1:"one", 2:"two", 3:"three"} for key in d.viewkeys(): print key #1 #2 #3 viewvalues() ---返回一個(gè)view對(duì)象,value的列表 d = {1:"one", 2:"two", 3:"three"} for value in d.viewvalues(): print value #one #two #three 4. 序列 序列類型是指容器內(nèi)的元素從0開(kāi)始的索引順序訪問(wèn),一次可以訪問(wèn)一個(gè)或者多個(gè)元素;列表、元組和字符串都是序列;序列的兩個(gè)主要特點(diǎn)是 索引操作符和切片操作符;索引可以得到特定元素;切片可以得到部分序列; 1 numbers = ["zero", "one", "two", "three", "four"] 2 3 print numbers[1] # one 4 print numbers[-1] # four 5 #print numbers[5] # raise IndexError 6 7 print numbers[:] # ['zero', 'one', 'two', 'three', 'four'] 8 print numbers[3:] # ['three', 'four'] 9 print numbers[:2] # ['zero', 'one'] 10 print numbers[2:4] # ['two', 'three'] 11 print numbers[1:-1] # ['one', 'two', 'three'] 切片操作符中的第一個(gè)數(shù)(冒號(hào)之前)表示切片開(kāi)始的位置,第二個(gè)數(shù)(冒號(hào)之后)表示切片到哪里結(jié)束。 如果不指定第一個(gè)數(shù),Python就從 序列首開(kāi)始。如果沒(méi)有指定第二個(gè)數(shù),則Python會(huì)停止在序列尾。 注意,返回的序列從開(kāi)始位置 開(kāi)始 ,剛好在結(jié)束位置之前 結(jié)束。即開(kāi)始位置是 包含在序列切片中的,而結(jié)束位置被排斥在切片外。 可以用負(fù)數(shù)做切片。負(fù)數(shù)用在從序列尾開(kāi)始計(jì)算的位置。 5. 綁定 當(dāng)創(chuàng)建一個(gè)對(duì)象并給它賦一個(gè)變量的時(shí)候,這個(gè)變量?jī)H僅“指向”那個(gè)對(duì)象,而不是表示這個(gè)對(duì)象本身! 也就是說(shuō),變量名指向計(jì)算機(jī)中存儲(chǔ)那個(gè) 對(duì)象的內(nèi)存,這被稱作名稱到對(duì)象的綁定。 如果要復(fù)制一個(gè)列表或者類似的序列或者其他復(fù)雜的對(duì)象(不是如整數(shù)那樣的簡(jiǎn)單對(duì)象),那么必須使用切片操作符來(lái)取得拷貝。 七、面向?qū)ο缶幊? python支持面向?qū)ο缶幊蹋活惡蛯?duì)象是面向?qū)ο缶幊痰膬蓚€(gè)主要方面,類創(chuàng)建一個(gè)新的類型,對(duì)象是這個(gè)類的實(shí)例。 對(duì)象可以使用普通的屬于對(duì)象的變量存儲(chǔ)數(shù)據(jù),屬于對(duì)象或類的變量被稱為域;對(duì)象也可以使用屬于類的函數(shù),這樣的函數(shù)稱為類的方法;域和方法可以合稱為類的屬性。 域有兩種類型--屬于實(shí)例的或?qū)儆陬惐旧?;它們分別被稱為實(shí)例變量和類變量。 類使用關(guān)鍵字class創(chuàng)建,類的域和方法被列在一個(gè)縮進(jìn)塊中。 類的方法必須有一個(gè)額外的第一個(gè)參數(shù),但是在調(diào)用時(shí)不為這個(gè)參數(shù)賦值,這個(gè)特殊變量指對(duì)象本身,按照慣例它的名稱是self,類似C#中的this。 class Animal: pass #empty block __init__方法 在類的一個(gè)對(duì)象被創(chuàng)建時(shí)調(diào)用該方法;相當(dāng)于c++中的構(gòu)造函數(shù)。 __del__方法 在類的對(duì)象被銷毀時(shí)調(diào)用該方法;相當(dāng)于c++中的析構(gòu)函數(shù)。在使用del刪除一個(gè)對(duì)象時(shí)也就調(diào)用__del__方法。 Python中所有的類成員(包括數(shù)據(jù)成員)都是public的;只有一個(gè)例外,如果使用的數(shù)據(jù)成員以雙下劃線為前綴,則為私有變量。 class Person: Count = 0 def __init__(self, name, age): Person.Count += 1 self.name = name self.__age = age p = Person("peter", 25) p1 = Person("john", 20) print Person.Count #2 print p.name #peter print p.__age #AttributeError: Person instance has no attribute '__age' 繼承:為了使用繼承,基類的名稱作為一個(gè)元組跟在類名稱的后面;python支持多重繼承。下面是一個(gè)關(guān)于繼承的例子: 1 class SchoolMember: 2 '''Represent any school member.''' 3 def __init__(self, name, age): 4 self.name = name 5 self.age = age 6 print "Initializing a school member." 7 8 def tell(self): 9 '''Tell my details''' 10 print "Name: %s, Age: %s, " % (self.name, self.age), 11 12 class Teacher(SchoolMember): 13 '''Represent a teacher.''' 14 def __init__(self, name, age, salary): 15 SchoolMember.__init__(self, name, age) 16 self.salary = salary 17 print "Initializing a teacher" 18 19 def tell(self): 20 SchoolMember.tell(self) 21 print "Salary: %d" % self.salary 22 23 class Student(SchoolMember): 24 '''Represent a student.''' 25 def __init__(self, name, age, marks): 26 SchoolMember.__init__(self, name, age) 27 self.marks = marks 28 print "Initializing a student" 29 30 def tell(self): 31 SchoolMember.tell(self) 32 print "Marks: %d" % self.marks 33 34 print SchoolMember.__doc__ 35 print Teacher.__doc__ 36 print Student.__doc__ 37 38 t = Teacher("Mr. Li", 30, 9000) 39 s = Student("Peter", 25, 90) 40 41 members = [t, s] 42 43 for m in members: 44 m.tell() 程序輸出如下: Represent any school member. Represent a teacher. Represent a student. Initializing a school member. Initializing a teacher Initializing a school member. Initializing a student Name: Mr. Li, Age: 30, Salary: 9000 Name: Peter, Age: 25, Marks: 90 八、輸入/輸出 程序與用戶的交互需要使用輸入/輸出,主要包括控制臺(tái)和文件;對(duì)于控制臺(tái)可以使用raw_input和print,也可使用str類。raw_input(xxx)輸入xxx然后讀取用戶的輸入并返回。 1. 文件輸入/輸出 可以使用file類打開(kāi)一個(gè)文件,使用file的read、readline和write來(lái)恰當(dāng)?shù)淖x寫(xiě)文件。對(duì)文件讀寫(xiě)能力取決于打開(kāi)文件時(shí)使用的模式,常用模式 有讀模式("r")、寫(xiě)模式("w")、追加模式("a"),文件操作之后需要調(diào)用close方法來(lái)關(guān)閉文件。 1 test = '''\ 2 This is a program about file I/O. 3 4 Author: Peter Zhange 5 Date: 2011/12/25 6 ''' 7 8 f = file("test.txt", "w") # open for writing, the file will be created if the file doesn't exist 9 f.write(test) # write text to file 10 f.close() # close the file 11 12 f = file("test.txt") # if no mode is specified, the default mode is readonly. 13 14 while True: 15 line = f.readline() 16 if len(line) == 0: # zero length indicates the EOF of the file 17 break 18 print line, 19 20 f.close() 2. 存儲(chǔ)器 python提供一個(gè)標(biāo)準(zhǔn)的模塊,成為pickle,使用它可以在一個(gè)文件中存儲(chǔ)任何python對(duì)象,之后可以完整的取出來(lái),這被稱為持久地存儲(chǔ)對(duì)象;還有另外一個(gè)模塊成為cPickle,它的功能和pickle完全一樣,只不過(guò)它是用c寫(xiě)的,要比pickle速度快(大約快1000倍)。 import cPickle datafile = "data.data" namelist = ["peter", "john", "king"] f = file(datafile, "w") cPickle.dump(namelist, f) f.close() del namelist f = file(datafile) storednamelist = cPickle.load(f) print storednamelist #['peter', 'john', 'king'] 九、異常 當(dāng)程序中出現(xiàn)某些異常的狀況時(shí),異常就發(fā)生了。python中可以使用try ... except 處理。 try: print 1/0 except ZeroDivisionError, e: print e except: print "error or exception occurred." #integer division or modulo by zero 可以讓try ... except 關(guān)聯(lián)上一個(gè)else,當(dāng)沒(méi)有異常時(shí)則執(zhí)行else。 我們可以定義自己的異常類,需要繼承Error或Exception。 class ShortInputException(Exception): '''A user-defined exception class''' def __init__(self, length, atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: s = raw_input("enter someting-->") if len(s) < 3: raise ShortInputException(len(s), 3) except EOFError: print "why you input an EOF?" except ShortInputException, ex: print "The lenght of input is %d, was expecting at the least %d" % (ex.length, ex.atleast) else: print "no exception" #The lenght of input is 1, was expecting at the least 3 try...finally try: f = file("test.txt") while True: line = f.readline() if len(line) == 0: break time.sleep(2) print line, finally: f.close() print "Cleaning up..." 十、Python標(biāo)準(zhǔn)庫(kù) Python標(biāo)準(zhǔn)庫(kù)是隨Pthon附帶安裝的,包含了大量極其有用的模塊。 1. sys模塊 sys模塊包含系統(tǒng)對(duì)應(yīng)的功能 sys.argv ---包含命令行參數(shù),第一個(gè)參數(shù)是py的文件名 sys.platform ---返回平臺(tái)類型 sys.exit([status]) ---退出程序,可選的status(范圍:0-127):0表示正常退出,其他表示不正常,可拋異常事件供捕獲 sys.path ---程序中導(dǎo)入模塊對(duì)應(yīng)的文件必須放在sys.path包含的目錄中,使用sys.path.append添加自己的模塊路徑 sys.modules ---This is a dictionary that maps module names to modules which have already been loaded sys.stdin,sys.stdout,sys.stderr ---包含與標(biāo)準(zhǔn)I/O 流對(duì)應(yīng)的流對(duì)象 s = sys.stdin.readline() sys.stdout.write(s) 2. os模塊 該模塊包含普遍的操作系統(tǒng)功能 os.name字符串指示你正在使用的平臺(tái)。比如對(duì)于Windows,它是'nt',而對(duì)于Linux/Unix用戶,它是'posix' os.getcwd()函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑 os.getenv()和os.putenv()函數(shù)分別用來(lái)讀取和設(shè)置環(huán)境變量 os.listdir()返回指定目錄下的所有文件和目錄名 os.remove()函數(shù)用來(lái)刪除一個(gè)文件 os.system()函數(shù)用來(lái)運(yùn)行shell命令 os.linesep字符串給出當(dāng)前平臺(tái)使用的行終止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r' os.sep 操作系統(tǒng)特定的路徑分割符 os.path.split()函數(shù)返回一個(gè)路徑的目錄名和文件名 os.path.isfile()和os.path.isdir()函數(shù)分別檢驗(yàn)給出的路徑是一個(gè)文件還是目錄 os.path.existe()函數(shù)用來(lái)檢驗(yàn)給出的路徑是否真地存在 十一、其他 1. 一些特殊的方法- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
32 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Python 基礎(chǔ)語(yǔ)法 基礎(chǔ) 語(yǔ)法
鏈接地址:http://m.jqnhouse.com/p-1617692.html