一,、Python的特點(diǎn)
二,、基本概念1. python中數(shù)有四種類型:整數(shù),、長整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù),。
2. 字符串(字符的序列)
3. 標(biāo)識(shí)符的命名
4. 對(duì)象python程序中用到的任何“東西”都成為“對(duì)象”。 5. 邏輯行和物理行物理行是我們在編寫程序時(shí)看到的,,邏輯行則是python看到的,。python中分號(hào);標(biāo)識(shí)一個(gè)邏輯行的結(jié)束,,但是實(shí)際中一般每個(gè)物理行只寫一個(gè)邏輯行,可以避免使用分號(hào),。多個(gè)物理行中可以寫一個(gè)邏輯行,,如下: 上面\的使用被稱為‘明確的行連接’, 又如: 6. 縮進(jìn)空白在python是非常重要的,,行首的空白是最重要的,,又稱為縮進(jìn)。行首的空白(空格和制表符)用來決定邏輯行的縮進(jìn)層次,,從而決定語句分組,。這意味著同一層次的語句必須有相同的縮進(jìn),每一組這樣的語句稱為一個(gè)塊,。注意:不要混合使用空格和制表符來縮進(jìn),,因?yàn)樵诳缭讲煌钠脚_(tái)時(shí)無法正常工作。 三,、運(yùn)算符與表達(dá)式2. 運(yùn)算符優(yōu)先級(jí)(從低到高) 3. python 控制臺(tái)輸出 四,、控制語句1. if 語句 2. while語句 3. for 循環(huán) for..in 注意: 當(dāng)for循環(huán)結(jié)束后執(zhí)行else語句; range(a, b)返回一個(gè)序列,,從a開始到b為止,,但不包括b,range默認(rèn)步長為1,,可以指定步長,,range(0,10,2); 4. break語句 終止循環(huán)語句,,如果從for或while中終止,,任何對(duì)應(yīng)循環(huán)的else將不執(zhí)行。 5. continue語句 continue語句用來調(diào)過當(dāng)前循環(huán)的剩余語句,,然后繼續(xù)下一輪循環(huán)。 五,、函數(shù)函數(shù)通過def定義,。def關(guān)鍵字后跟函數(shù)的標(biāo)識(shí)符名稱,然后跟一對(duì)圓括號(hào),,括號(hào)之內(nèi)可以包含一些變量名,,該行以冒號(hào)結(jié)尾;接下來是一塊語句,,即函數(shù)體 1. 函數(shù)形參 函數(shù)中的參數(shù)名稱為‘形參’,,調(diào)用函數(shù)時(shí)傳遞的值為‘實(shí)參’ 2. 局部變量 在函數(shù)內(nèi)定義的變量與函數(shù)外具有相同名稱的其他變量沒有任何關(guān)系,即變量名稱對(duì)于函數(shù)來說是局部的,。這稱為變量的作用域,。 global語句, 為定義在函數(shù)外的變量賦值時(shí)使用global語句。 3. 默認(rèn)參數(shù) 通過使用默認(rèn)參數(shù)可以使函數(shù)的一些參數(shù)是‘可選的’,。 注意: 只有在形參表末尾的那些參數(shù)可以有默認(rèn)參數(shù)值,,即不能在聲明函數(shù)形參的時(shí)候,先聲明有默認(rèn)值的形參而后聲明沒有默認(rèn)值的形參,,只是因?yàn)橘x給形參的值是根據(jù)位置而賦值的,。 4. 關(guān)鍵參數(shù) 如果某個(gè)函數(shù)有很多參數(shù),而現(xiàn)在只想指定其中的部分,,那么可以通過命名為這些參數(shù)賦值(稱為‘關(guān)鍵參數(shù)’),。 優(yōu)點(diǎn):不必?fù)?dān)心參數(shù)的順序,使函數(shù)變的更加簡單,;假設(shè)其他參數(shù)都有默認(rèn)值,,可以只給我們想要的那些參數(shù)賦值。 5. return 語句 return語句用來從一個(gè)函數(shù)返回,,即跳出函數(shù),。可從函數(shù)返回一個(gè)值,。 沒有返回值的return語句等價(jià)于return None,。None表示沒有任何東西的特殊類型。 6. DocStrings(文檔字符串) 六,、模塊模塊就是一個(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)無關(guān))字節(jié)碼,是有python虛擬機(jī)執(zhí)行的,,類似于java或.net虛擬機(jī)的概念,。pyc的內(nèi)容,是跟python的版本相關(guān)的,,不同版本編譯后的pyc文件是不同的,。 2. from .. import 如果想直接使用其他模塊的變量或其他,,而不加'模塊名+.'前綴,可以使用from .. import,。 例如想直接使用sys的argv,, fromsysimportargv或 fromsysimport* 3. 模塊的_name_ 每個(gè)模塊都有一個(gè)名稱,py文件對(duì)應(yīng)模塊名默認(rèn)為py文件名,,也可在py文件中為name賦值,;如果是name,說明這個(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()查看長度,;使用del可以刪除列表中的項(xiàng),,eg: del l[0] # 如果超出范圍,則IndexError list函數(shù)如下: append(value) ---向列表尾添加項(xiàng)value count(value) ---返回列表中值為value的項(xiàng)的個(gè)數(shù) extend(list2) ---向列表尾添加列表list2 index(value, [start, [stop]])---返回列表中第一個(gè)出現(xiàn)的值為value的索引,,如果沒有,則異常 ValueError insert(i, value) ---向列表i位置插入項(xiàng)vlaue,,如果沒有i,,則添加到列表尾部 pop([i]) ---返回i位置項(xiàng),并從列表中刪除,;如果不提供參數(shù),,則刪除最后一個(gè)項(xiàng),;如果提供,但是i超出索引范圍,,則異常IndexError remove(value) ---刪除列表中第一次出現(xiàn)的value,,如果列表中沒有vlaue,則異常ValueError reverse() ---列表反轉(zhuǎn) sort(cmp=None, key=None, reverse=False) ---列表排序 2. 元組 tuple和list十分相似,,但是tuple是不可變的,,即不能修改tuple,元組通過圓括號(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)行‘寫保護(hù)’,,可以是代碼更安全 tuple與list可以相互轉(zhuǎn)換,,使用內(nèi)置的函數(shù)list()和tuple()。 元組最通常的用法是用在打印語句,,如下例: 函數(shù)如下: count(value) ---返回元組中值為value的元素的個(gè)數(shù) index(value, [start, [stop]]) ---返回列表中第一個(gè)出現(xiàn)的值為value的索引,,如果沒有,則異常 ValueError 3. 字典 字典由鍵值對(duì)組成,,鍵必須是唯一的,;eg: d = {key1:value1, key2:value2};空字典用{}表示,;字典中的鍵值對(duì)是沒有順序的,,如果想要一個(gè)特定的順序,那么使用前需要對(duì)它們排序,;d[key] = value,,如果字典中已有key,則為其賦值為value,,否則添加新的鍵值對(duì)key/value,;使用del d[key] 可以刪除鍵值對(duì);判斷字典中是否有某鍵,,可以使用in 或 not in,; dict函數(shù)如下: clear() ---刪除字典中所有元素 copy() ---返回字典的一個(gè)副本(淺復(fù)制) dict.fromkeys(seq,val=None) ---創(chuàng)建并返回一個(gè)新字典,以序列seq中元素做字典的鍵,,val為字典所有鍵對(duì)應(yīng)的初始值(默認(rèn)為None) get(key,[default]) ---返回字典dict中鍵key對(duì)應(yīng)值,,如果字典中不存在此鍵,則返回default 的值(default默認(rèn)值為None) has_key(key) ---判斷字典中是否有鍵key items() ---返回一個(gè)包含字典中(鍵, 值)對(duì)元組的列表 keys() ---返回一個(gè)包含字典中所有鍵的列表 values() ---返回一個(gè)包含字典中所有值的列表 pop(key, [default]) ---若字典中key鍵存在,,刪除并返回dict[key],,若不存在,,且未給出default值,引發(fā)KeyError異常 popitem() ---刪除任意鍵值對(duì),,并返回該鍵值對(duì),,如果字典為空,則產(chǎn)生異常KeyError setdefault(key,[default]) ---若字典中有key,,則返回vlaue值,,若沒有key,則加上該key,,值為default,,默認(rèn)None update(dict2) ---把dict2的元素加入到dict中去,鍵字重復(fù)時(shí)會(huì)覆蓋dict中的鍵值 viewitems()---返回一個(gè)view對(duì)象,,(key, value)pair的列表,,類似于視圖。優(yōu)點(diǎn)是,,如果字典發(fā)生變化,,view會(huì)同步發(fā)生變化。在迭代過程中,,字典不允許改變,,否則會(huì)報(bào)異常 viewkeys() ---返回一個(gè)view對(duì)象,key的列表 4. 序列 序列類型是指容器內(nèi)的元素從0開始的索引順序訪問,,一次可以訪問一個(gè)或者多個(gè)元素,;列表、元組和字符串都是序列,; 序列的兩個(gè)主要特點(diǎn)是:索引操作符和切片操作符,;索引可以得到特定元素;切片可以得到部分序列,; 切片操作符中的第一個(gè)數(shù)(冒號(hào)之前)表示切片開始的位置,,第二個(gè)數(shù)(冒號(hào)之后)表示切片到哪里結(jié)束。 如果不指定第一個(gè)數(shù),,Python就從序列首開始,。如果沒有指定第二個(gè)數(shù),則Python會(huì)停止在序列尾,。 注意,,返回的序列從開始位置 開始 ,剛好在結(jié)束位置之前 結(jié)束,。即開始位置是包含在序列切片中的,,而結(jié)束位置被排斥在切片外。 可以用負(fù)數(shù)做切片。負(fù)數(shù)用在從序列尾開始計(jì)算的位置,。 5. 綁定 當(dāng)創(chuàng)建一個(gè)對(duì)象并給它賦一個(gè)變量的時(shí)候,這個(gè)變量僅僅“指向”那個(gè)對(duì)象,,而不是表示這個(gè)對(duì)象本身,! 也就是說,變量名指向計(jì)算機(jī)中存儲(chǔ)那個(gè)對(duì)象的內(nèi)存,,這被稱作名稱到對(duì)象的綁定,。 如果要復(fù)制一個(gè)列表或者類似的序列或者其他復(fù)雜的對(duì)象(不是如整數(shù)那樣的簡單對(duì)象),那么必須使用切片操作符來取得拷貝,。 八,、面向?qū)ο缶幊?/h2>python支持面向?qū)ο缶幊蹋活惡蛯?duì)象是面向?qū)ο缶幊痰膬蓚€(gè)主要方面,,類創(chuàng)建一個(gè)新的類型,,對(duì)象是這個(gè)類的實(shí)例。 對(duì)象可以使用普通的屬于對(duì)象的變量存儲(chǔ)數(shù)據(jù),,屬于對(duì)象或類的變量被稱為域,;對(duì)象也可以使用屬于類的函數(shù),這樣的函數(shù)稱為類的方法,;域和方法可以合稱為類的屬性,。 域有兩種類型--屬于實(shí)例的或?qū)儆陬惐旧恚凰鼈兎謩e被稱為實(shí)例變量和類變量,。 類使用關(guān)鍵字class創(chuàng)建,,類的域和方法被列在一個(gè)縮進(jìn)塊中。 類的方法必須有一個(gè)額外的第一個(gè)參數(shù),,但是在調(diào)用時(shí)不為這個(gè)參數(shù)賦值,,這個(gè)特殊變量指對(duì)象本身,按照慣例它的名稱是self,,類似C#中的this,。 _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ù)成員以雙下劃線為前綴,,則為私有變量,。 繼承:為了使用繼承,基類的名稱作為一個(gè)元組跟在類名稱的后面,;python支持多重繼承,。下面是一個(gè)關(guān)于繼承的例子: 九,、輸入/輸出 程序與用戶的交互需要使用輸入/輸出,主要包括控制臺(tái)和文件,;對(duì)于控制臺(tái)可以使用rawinput和print,,也可使用str類。rawinput(xxx)輸入xxx然后讀取用戶的輸入并返回,。 1. 文件輸入/輸出 可以使用file類打開一個(gè)文件,,使用file的read、readline和write來恰當(dāng)?shù)淖x寫文件,。對(duì)文件讀寫能力取決于打開文件時(shí)使用的模式,,常用模式有讀模式('r')、寫模式('w'),、追加模式('a'),,文件操作之后需要調(diào)用close方法來關(guān)閉文件。 2. 存儲(chǔ)器 python提供一個(gè)標(biāo)準(zhǔn)的模塊,,成為pickle,,使用它可以在一個(gè)文件中存儲(chǔ)任何python對(duì)象,之后可以完整的取出來,,這被稱為持久地存儲(chǔ)對(duì)象,;還有另外一個(gè)模塊成為cPickle,它的功能和pickle完全一樣,,只不過它是用c寫的,,要比pickle速度快(大約快1000倍)。 十,、異常當(dāng)程序中出現(xiàn)某些異常的狀況時(shí),,異常就發(fā)生了。python中可以使用try ... except 處理,。 可以讓try ... except 關(guān)聯(lián)上一個(gè)else,,當(dāng)沒有異常時(shí)則執(zhí)行else。 我們可以定義自己的異常類,,需要繼承Error或Exception,。 try...finally 十一、Python標(biāo)準(zhǔn)庫Python標(biāo)準(zhǔn)庫是隨Pthon附帶安裝的,,包含了大量極其有用的模塊,。 1. sys模塊 sys模塊包含系統(tǒng)對(duì)應(yīng)的功能
2. os模塊 該模塊包含普遍的操作系統(tǒng)功能
十二,、其他1. 一些特殊的方法 例如: 2. 綜合列表 通過列表綜合,,可以從一個(gè)已有的列表導(dǎo)出一個(gè)新的列表。 3. 函數(shù)接收元組/列表/字典 當(dāng)函數(shù)接收元組或字典形式的參數(shù)的時(shí)候,,有一種特殊的方法,,使用和前綴。該方法在函數(shù)需要獲取可變數(shù)量的參數(shù)的時(shí)候特別有用,。 由于在args變量前有前綴,,所有多余的函數(shù)參數(shù)都會(huì)作為一個(gè)元組存儲(chǔ)在args中。如果使用的是前綴,,多余的參數(shù)則會(huì)被認(rèn)為是一個(gè)字典的鍵/值對(duì),。 4. lambda lambda語句被用來創(chuàng)建新的函數(shù)對(duì)象,并在運(yùn)行時(shí)返回它們,。lambda需要一個(gè)參數(shù),,后面僅跟單個(gè)表達(dá)式作為函數(shù)體,而表達(dá)式的值被這個(gè)新建的函數(shù)返回,。 注意,,即便是print語句也不能用在lambda形式中,只能使用表達(dá)式,。 5. exec/eval exec語句用來執(zhí)行儲(chǔ)存在字符串或文件中的Python語句,;eval語句用來計(jì)算存儲(chǔ)在字符串中的有效Python表達(dá)式。 6. assert assert語句用來斷言某個(gè)條件是真的,,并且在它非真的時(shí)候引發(fā)一個(gè)錯(cuò)誤-- AssertionError,。 7. repr函數(shù) repr函數(shù)用來取得對(duì)象的規(guī)范字符串表示。反引號(hào)(也稱轉(zhuǎn)換符)可以完成相同的功能,。 注意,,在大多數(shù)時(shí)候有 eval(repr(object))==object??梢酝ㄟ^定義類的repr方法來控制對(duì)象在被repr函數(shù)調(diào)用的時(shí)候返回的內(nèi)容,。 十三、練習(xí)實(shí)現(xiàn)一個(gè)通訊錄,主要功能:添加,、刪除,、更新、查詢,、顯示全部聯(lián)系人,。 |
|