簡(jiǎn)單Python是一種代表簡(jiǎn)單思想的語(yǔ)言。
易學(xué)Python有極其簡(jiǎn)單的語(yǔ)法。
免費、開(kāi)源Python是FLOSS(自由/開(kāi)放源碼軟件)之一。
高層語(yǔ)言使用Python編寫(xiě)程序時(shí)無(wú)需考慮如何管理程序使用的內存一類(lèi)的底層細節。
可移植性Python已被移植到很多平臺,這些平臺包括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。
解釋性可以直接從源代碼運行。在計算機內部,python解釋器把源代碼轉換為字節碼的中間形式,然后再把它翻譯成計算機使用的機器語(yǔ)言。
面向對象Python既支持面向過(guò)程編程也支持面向對象編程。
可擴展性部分程序可以使用其他語(yǔ)言編寫(xiě),如c/c++。
可嵌入型可以把Python嵌入到c/c++程序中,從而提供腳本功能。
豐富的庫Python標準庫確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達式、文檔生成、單元測試、線(xiàn)程、數據庫、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶(hù)界面)、Tk和其他與系統有關(guān)的操作。
1. python中數有四種類(lèi)型:整數、長(cháng)整數、浮點(diǎn)數和復數。
整數, 如 1
長(cháng)整數 是比較大的整數
浮點(diǎn)數 如 1.23、3E-2
復數 如 1 + 2j、 1.1 + 2.2j
2. 字符串(字符的序列)
python中單引號和雙引號使用完全相同。
使用三引號('''或''')可以指定一個(gè)多行字符串。
轉義符 '\'
自然字符串, 通過(guò)在字符串前加r或R。 如 r'this is a line with \n' 則\n會(huì )顯示,并不是換行。
python允許處理unicode字符串,加前綴u或U, 如 u'this is an unicode string'。
字符串是不可變的。
按字面意義級聯(lián)字符串,如'this ' 'is ' 'string'會(huì )被自動(dòng)轉換為this is string。
3. 標識符的命名
第一個(gè)字符必須是字母表中字母或下劃線(xiàn)'_'。
標識符的其他的部分有字母、數字和下劃線(xiàn)組成。
標識符對大小寫(xiě)敏感。
4. 對象python程序中用到的任何“東西”都成為“對象”。
5. 邏輯行和物理行物理行是我們在編寫(xiě)程序時(shí)看到的,邏輯行則是python看到的。python中分號;標識一個(gè)邏輯行的結束,但是實(shí)際中一般每個(gè)物理行只寫(xiě)一個(gè)邏輯行,可以避免使用分號。多個(gè)物理行中可以寫(xiě)一個(gè)邏輯行,如下:
上面\的使用被稱(chēng)為‘明確的行連接’, 又如:
6. 縮進(jìn)空白在python是非常重要的,行首的空白是最重要的,又稱(chēng)為縮進(jìn)。行首的空白(空格和制表符)用來(lái)決定邏輯行的縮進(jìn)層次,從而決定語(yǔ)句分組。這意味著(zhù)同一層次的語(yǔ)句必須有相同的縮進(jìn),每一組這樣的語(yǔ)句稱(chēng)為一個(gè)塊。注意:不要混合使用空格和制表符來(lái)縮進(jìn),因為在跨越不同的平臺時(shí)無(wú)法正常工作。
2. 運算符優(yōu)先級(從低到高)


3. python 控制臺輸出

1. if 語(yǔ)句

2. while語(yǔ)句

3. for 循環(huán) for..in

注意: 當for循環(huán)結束后執行else語(yǔ)句; range(a, b)返回一個(gè)序列,從a開(kāi)始到b為止,但不包括b,range默認步長(cháng)為1,可以指定步長(cháng),range(0,10,2);
4. break語(yǔ)句
終止循環(huán)語(yǔ)句,如果從for或while中終止,任何對應循環(huán)的else將不執行。
5. continue語(yǔ)句
continue語(yǔ)句用來(lái)調過(guò)當前循環(huán)的剩余語(yǔ)句,然后繼續下一輪循環(huán)。
函數通過(guò)def定義。def關(guān)鍵字后跟函數的標識符名稱(chēng),然后跟一對圓括號,括號之內可以包含一些變量名,該行以冒號結尾;接下來(lái)是一塊語(yǔ)句,即函數體

1. 函數形參
函數中的參數名稱(chēng)為‘形參’,調用函數時(shí)傳遞的值為‘實(shí)參’
2. 局部變量
在函數內定義的變量與函數外具有相同名稱(chēng)的其他變量沒(méi)有任何關(guān)系,即變量名稱(chēng)對于函數來(lái)說(shuō)是局部的。這稱(chēng)為變量的作用域。 global語(yǔ)句, 為定義在函數外的變量賦值時(shí)使用global語(yǔ)句。

3. 默認參數
通過(guò)使用默認參數可以使函數的一些參數是‘可選的’。

注意: 只有在形參表末尾的那些參數可以有默認參數值,即不能在聲明函數形參的時(shí)候,先聲明有默認值的形參而后聲明沒(méi)有默認值的形參,只是因為賦給形參的值是根據位置而賦值的。
4. 關(guān)鍵參數
如果某個(gè)函數有很多參數,而現在只想指定其中的部分,那么可以通過(guò)命名為這些參數賦值(稱(chēng)為‘關(guān)鍵參數’)。 優(yōu)點(diǎn):不必擔心參數的順序,使函數變的更加簡(jiǎn)單;假設其他參數都有默認值,可以只給我們想要的那些參數賦值。

5. return 語(yǔ)句
return語(yǔ)句用來(lái)從一個(gè)函數返回,即跳出函數??蓮暮瘮捣祷匾粋€(gè)值。 沒(méi)有返回值的return語(yǔ)句等價(jià)于return None。None表示沒(méi)有任何東西的特殊類(lèi)型。
6. DocStrings(文檔字符串)

模塊就是一個(gè)包含了所有你定義的函數和變量的文件,模塊必須以.py為擴展名。模塊可以從其他程序中‘輸入’(import)以便利用它的功能。 在python程序中導入其他模塊使用'import', 所導入的模塊必須在sys.path所列的目錄中,因為sys.path第一個(gè)字符串是空串''即當前目錄,所以程序中可導入當前目錄的模塊。
1. 字節編譯的.pyc文件
導入模塊比較費時(shí),python做了優(yōu)化,以便導入模塊更快些。一種方法是創(chuàng )建字節編譯的文件,這些文件以.pyc為擴展名。 pyc是一種二進(jìn)制文件,是py文件經(jīng)編譯后產(chǎn)生的一種byte code,而且是跨平臺的(平臺無(wú)關(guān))字節碼,是有python虛擬機執行的,類(lèi)似于java或.net虛擬機的概念。pyc的內容,是跟python的版本相關(guān)的,不同版本編譯后的pyc文件是不同的。
2. from .. import
如果想直接使用其他模塊的變量或其他,而不加'模塊名+.'前綴,可以使用from .. import。 例如想直接使用sys的argv, fromsysimportargv或 fromsysimport*
3. 模塊的_name_
每個(gè)模塊都有一個(gè)名稱(chēng),py文件對應模塊名默認為py文件名,也可在py文件中為name賦值;如果是name,說(shuō)明這個(gè)模塊被用戶(hù)單獨運行。
4. dir()函數
dir(sys)返回sys模塊的名稱(chēng)列表;如果不提供參數,即dir(),則返回當前模塊中定義名稱(chēng)列表。 del -> 刪除一個(gè)變量/名稱(chēng),del之后,該變量就不能再使用。
python有三種內建的數據結構:列表、元組和字典。
1. 列表
list是處理一組有序項目的數據結構,列表是可變的數據結構。列表的項目包含在方括號[]中,eg: [1, 2, 3], 空列表[]。判斷列表中是否包含某項可以使用in, 比如 l = [1, 2, 3]; print 1 in l; #True;支持索引和切片操作;索引時(shí)若超出范圍,則IndexError;使用函數len()查看長(cháng)度;使用del可以刪除列表中的項,eg: del l[0] # 如果超出范圍,則IndexError list函數如下:
append(value) ---向列表尾添加項value

count(value) ---返回列表中值為value的項的個(gè)數

extend(list2) ---向列表尾添加列表list2

index(value, [start, [stop]])---返回列表中第一個(gè)出現的值為value的索引,如果沒(méi)有,則異常 ValueError

insert(i, value) ---向列表i位置插入項vlaue,如果沒(méi)有i,則添加到列表尾部

pop([i]) ---返回i位置項,并從列表中刪除;如果不提供參數,則刪除最后一個(gè)項;如果提供,但是i超出索引范圍,則異常IndexError

remove(value) ---刪除列表中第一次出現的value,如果列表中沒(méi)有vlaue,則異常ValueError

reverse() ---列表反轉

sort(cmp=None, key=None, reverse=False) ---列表排序

2. 元組
tuple和list十分相似,但是tuple是不可變的,即不能修改tuple,元組通過(guò)圓括號中用逗號分割的項定義;支持索引和切片操作;可以使用 in 查看一個(gè)元素是否在tuple中??赵M();只含有一個(gè)元素的元組('a',) #需要加個(gè)逗號 優(yōu)點(diǎn):tuple比list速度快;對不需要修改的數據進(jìn)行‘寫(xiě)保護’,可以是代碼更安全 tuple與list可以相互轉換,使用內置的函數list()和tuple()。

元組最通常的用法是用在打印語(yǔ)句,如下例:

函數如下:
count(value) ---返回元組中值為value的元素的個(gè)數

index(value, [start, [stop]]) ---返回列表中第一個(gè)出現的值為value的索引,如果沒(méi)有,則異常 ValueError

3. 字典
字典由鍵值對組成,鍵必須是唯一的;eg: d = {key1:value1, key2:value2};空字典用{}表示;字典中的鍵值對是沒(méi)有順序的,如果想要一個(gè)特定的順序,那么使用前需要對它們排序;d[key] = value,如果字典中已有key,則為其賦值為value,否則添加新的鍵值對key/value;使用del d[key] 可以刪除鍵值對;判斷字典中是否有某鍵,可以使用in 或 not in;

dict函數如下: clear() ---刪除字典中所有元素

copy() ---返回字典的一個(gè)副本(淺復制)

dict.fromkeys(seq,val=None) ---創(chuàng )建并返回一個(gè)新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值(默認為None)

get(key,[default]) ---返回字典dict中鍵key對應值,如果字典中不存在此鍵,則返回default 的值(default默認值為None)

has_key(key) ---判斷字典中是否有鍵key

items() ---返回一個(gè)包含字典中(鍵, 值)對元組的列表

keys() ---返回一個(gè)包含字典中所有鍵的列表

values() ---返回一個(gè)包含字典中所有值的列表

pop(key, [default]) ---若字典中key鍵存在,刪除并返回dict[key],若不存在,且未給出default值,引發(fā)KeyError異常

popitem() ---刪除任意鍵值對,并返回該鍵值對,如果字典為空,則產(chǎn)生異常KeyError

setdefault(key,[default]) ---若字典中有key,則返回vlaue值,若沒(méi)有key,則加上該key,值為default,默認None

update(dict2) ---把dict2的元素加入到dict中去,鍵字重復時(shí)會(huì )覆蓋dict中的鍵值

viewitems()---返回一個(gè)view對象,(key, value)pair的列表,類(lèi)似于視圖。優(yōu)點(diǎn)是,如果字典發(fā)生變化,view會(huì )同步發(fā)生變化。在迭代過(guò)程中,字典不允許改變,否則會(huì )報異常

viewkeys() ---返回一個(gè)view對象,key的列表

4. 序列
序列類(lèi)型是指容器內的元素從0開(kāi)始的索引順序訪(fǎng)問(wèn),一次可以訪(fǎng)問(wèn)一個(gè)或者多個(gè)元素;列表、元組和字符串都是序列; 序列的兩個(gè)主要特點(diǎn)是:索引操作符和切片操作符;索引可以得到特定元素;切片可以得到部分序列;

切片操作符中的第一個(gè)數(冒號之前)表示切片開(kāi)始的位置,第二個(gè)數(冒號之后)表示切片到哪里結束。 如果不指定第一個(gè)數,Python就從序列首開(kāi)始。如果沒(méi)有指定第二個(gè)數,則Python會(huì )停止在序列尾。 注意,返回的序列從開(kāi)始位置 開(kāi)始 ,剛好在結束位置之前 結束。即開(kāi)始位置是包含在序列切片中的,而結束位置被排斥在切片外。 可以用負數做切片。負數用在從序列尾開(kāi)始計算的位置。
5. 綁定
當創(chuàng )建一個(gè)對象并給它賦一個(gè)變量的時(shí)候,這個(gè)變量?jì)H僅“指向”那個(gè)對象,而不是表示這個(gè)對象本身! 也就是說(shuō),變量名指向計算機中存儲那個(gè)對象的內存,這被稱(chēng)作名稱(chēng)到對象的綁定。 如果要復制一個(gè)列表或者類(lèi)似的序列或者其他復雜的對象(不是如整數那樣的簡(jiǎn)單對象),那么必須使用切片操作符來(lái)取得拷貝。
python支持面向對象編程;類(lèi)和對象是面向對象編程的兩個(gè)主要方面,類(lèi)創(chuàng )建一個(gè)新的類(lèi)型,對象是這個(gè)類(lèi)的實(shí)例。
對象可以使用普通的屬于對象的變量存儲數據,屬于對象或類(lèi)的變量被稱(chēng)為域;對象也可以使用屬于類(lèi)的函數,這樣的函數稱(chēng)為類(lèi)的方法;域和方法可以合稱(chēng)為類(lèi)的屬性。
域有兩種類(lèi)型--屬于實(shí)例的或屬于類(lèi)本身;它們分別被稱(chēng)為實(shí)例變量和類(lèi)變量。
類(lèi)使用關(guān)鍵字class創(chuàng )建,類(lèi)的域和方法被列在一個(gè)縮進(jìn)塊中。
類(lèi)的方法必須有一個(gè)額外的第一個(gè)參數,但是在調用時(shí)不為這個(gè)參數賦值,這個(gè)特殊變量指對象本身,按照慣例它的名稱(chēng)是self,類(lèi)似C#中的this。

_init_方法 在類(lèi)的一個(gè)對象被創(chuàng )建時(shí)調用該方法;相當于c++中的構造函數。
_del方法 在類(lèi)的對象被銷(xiāo)毀時(shí)調用該方法;相當于c++中的析構函數。在使用del刪除一個(gè)對象時(shí)也就調用del_方法。
Python中所有的類(lèi)成員(包括數據成員)都是public的;只有一個(gè)例外,如果使用的數據成員以雙下劃線(xiàn)為前綴,則為私有變量。

繼承:為了使用繼承,基類(lèi)的名稱(chēng)作為一個(gè)元組跟在類(lèi)名稱(chēng)的后面;python支持多重繼承。下面是一個(gè)關(guān)于繼承的例子:


九、輸入/輸出
程序與用戶(hù)的交互需要使用輸入/輸出,主要包括控制臺和文件;對于控制臺可以使用rawinput和print,也可使用str類(lèi)。rawinput(xxx)輸入xxx然后讀取用戶(hù)的輸入并返回。
1. 文件輸入/輸出
可以使用file類(lèi)打開(kāi)一個(gè)文件,使用file的read、readline和write來(lái)恰當的讀寫(xiě)文件。對文件讀寫(xiě)能力取決于打開(kāi)文件時(shí)使用的模式,常用模式有讀模式('r')、寫(xiě)模式('w')、追加模式('a'),文件操作之后需要調用close方法來(lái)關(guān)閉文件。

2. 存儲器 python提供一個(gè)標準的模塊,成為pickle,使用它可以在一個(gè)文件中存儲任何python對象,之后可以完整的取出來(lái),這被稱(chēng)為持久地存儲對象;還有另外一個(gè)模塊成為cPickle,它的功能和pickle完全一樣,只不過(guò)它是用c寫(xiě)的,要比pickle速度快(大約快1000倍)。

當程序中出現某些異常的狀況時(shí),異常就發(fā)生了。python中可以使用try ... except 處理。

可以讓try ... except 關(guān)聯(lián)上一個(gè)else,當沒(méi)有異常時(shí)則執行else。 我們可以定義自己的異常類(lèi),需要繼承Error或Exception。

try...finally

Python標準庫是隨Pthon附帶安裝的,包含了大量極其有用的模塊。
1. sys模塊 sys模塊包含系統對應的功能
sys.argv ---包含命令行參數,第一個(gè)參數是py的文件名
sys.platform ---返回平臺類(lèi)型
sys.exit([status]) ---退出程序,可選的status(范圍:0-127):0表示正常退出,其他表示不正常,可拋異常事件供捕獲
sys.path ---程序中導入模塊對應的文件必須放在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 ---包含與標準I/O 流對應的流對象

2. os模塊 該模塊包含普遍的操作系統功能
os.name字符串指示你正在使用的平臺。比如對于Windows,它是'nt',而對于Linux/Unix用戶(hù),它是'posix'
os.getcwd()函數得到當前工作目錄,即當前Python腳本工作的目錄路徑
os.getenv()和os.putenv()函數分別用來(lái)讀取和設置環(huán)境變量
os.listdir()返回指定目錄下的所有文件和目錄名
os.remove()函數用來(lái)刪除一個(gè)文件
os.system()函數用來(lái)運行shell命令
os.linesep字符串給出當前平臺使用的行終止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
os.sep 操作系統特定的路徑分割符
os.path.split()函數返回一個(gè)路徑的目錄名和文件名
os.path.isfile()和os.path.isdir()函數分別檢驗給出的路徑是一個(gè)文件還是目錄
os.path.existe()函數用來(lái)檢驗給出的路徑是否真地存在
1. 一些特殊的方法

例如:


2. 綜合列表
通過(guò)列表綜合,可以從一個(gè)已有的列表導出一個(gè)新的列表。

3. 函數接收元組/列表/字典
當函數接收元組或字典形式的參數的時(shí)候,有一種特殊的方法,使用和前綴。該方法在函數需要獲取可變數量的參數的時(shí)候特別有用。 由于在args變量前有前綴,所有多余的函數參數都會(huì )作為一個(gè)元組存儲在args中。如果使用的是前綴,多余的參數則會(huì )被認為是一個(gè)字典的鍵/值對。

4. lambda
lambda語(yǔ)句被用來(lái)創(chuàng )建新的函數對象,并在運行時(shí)返回它們。lambda需要一個(gè)參數,后面僅跟單個(gè)表達式作為函數體,而表達式的值被這個(gè)新建的函數返回。 注意,即便是print語(yǔ)句也不能用在lambda形式中,只能使用表達式。

5. exec/eval
exec語(yǔ)句用來(lái)執行儲存在字符串或文件中的Python語(yǔ)句;eval語(yǔ)句用來(lái)計算存儲在字符串中的有效Python表達式。

6. assert
assert語(yǔ)句用來(lái)斷言某個(gè)條件是真的,并且在它非真的時(shí)候引發(fā)一個(gè)錯誤-- AssertionError。

7. repr函數
repr函數用來(lái)取得對象的規范字符串表示。反引號(也稱(chēng)轉換符)可以完成相同的功能。 注意,在大多數時(shí)候有 eval(repr(object))==object??梢酝ㄟ^(guò)定義類(lèi)的repr方法來(lái)控制對象在被repr函數調用的時(shí)候返回的內容。

實(shí)現一個(gè)通訊錄,主要功能:添加、刪除、更新、查詢(xún)、顯示全部聯(lián)系人。





聯(lián)系客服