1. 多個變量賦值:
- a = b = c =1;
- a, b, c = 1, 2, 'test'
2. 6個標準數據類型:
- 不可變數據3個:Number(數字),String(字符串),Tuple(元組);
- 可變數據3個:List(列表),Dictionary(字典),Set(集合)。
- 備註:string、list 和 tuple 都屬於 sequence(序列)。
2.1 Number(數字):
- python3支持int,float,bool(True,False),complex(複數);沒有python2中的long。另外python2中沒有bool,用的0和1。
- 數值的除法有2個運算符:/ 返回一個浮點數;// 返回整數部分(結果取整數部分,不四捨五入)。python2中 / 是取整,同3中的 // 。
- 注意:// 獲得的並不必定是整數類型的數,它與分母分子的數據類型有關係。如:7 // 2.0 # 結果:3.0
2.2 String(字符串):
- 字符串用單引號 ' 或者雙引號 " 括起來;
- \ 可用來轉義;也可用來做續行符;
- 字符串前面添加一個 r,表示原始字符串,不轉義;
- 字符串有2種索引方式:從左到右以0開始;從右到左以-1開始;
- 與C不一樣,python中的字符串不能改變;
- 運算符[]:經過索引獲取字符串中的字符;
- 運算符[:]:截取字符串中的一部分,左閉右開;str[0,2] 是不包含第 3 個字符的。
2.3 Tuple(元組):
- 雖然元組的元素不可改變,可是它也能夠包含可變的對象,如list列表;
- 構造0或1個元素的元組比較特殊,語法以下:tup1 = () # 空元組;tup2 = (12,) # 一個元素,須要在元素後添加逗號;
- 元組中的元素值不容許刪除,只能經過del語句來刪除整個元組。
2.4 Set(集合):
- 基本功能是:進行成員關係測試,和 刪除重複元素;如:print(set('abacc')) # 結果是{'a', 'b', 'c'};
- 建立方式:能夠用 { } 或 set()函數建立;注意:建立空集合須要用set() 而不能用{},由於 {} 是用來建立空字典的;
- 集合是無序的不重複元素序列。
2.5 Dictionary(字典):
- 列表是有序的對象集合,字典是無序的對象集合;
- 鍵值對錶示;key必須使用不可變類型;
- del dict['Name'] # 刪除鍵 'Name';
- dict.clear() # 清空字典;
- del dict # 刪除字典。
2.6 List(列表):
- 嵌套列表:
>>>a = ['a', 'b', 'c']java
>>> n = [1, 2, 3]python
>>> x = [a, n]shell
>>> xexpress
[['a', 'b', 'c'], [1, 2, 3]]服務器
>>> x[0]數據結構
['a', 'b', 'c']閉包
>>> x[0][1]app
'b'dom
3.運算符
3.1 is 和==的區別
- is 用於判斷兩個變量引用對象是否爲同一個;== 用於判斷引用變量的值是否相等;
- 對比java來看,能夠粗略地看做:python中==比較值,相似於Java中的equals;python中is比較引用,相似於Java中的==。
3.2 隨機數函數
- choice(seq):從序列的元素中隨機選一個元素。如random.choice(range(10)):從0-9中隨機挑選一個整數;
- randrange([start,] stop [,step]):返回指定遞增基數集合中的一個隨機數,基數缺省值爲1;包含start,不包含stop;
- random():隨機生成一個實數,[0, 1)範圍內;
- uniform(x, y):生成一個指定範圍內的隨機符點數,在[x, y] 範圍內;兩個參數其中一個是上限,一個是下限,x能夠小於y,也能夠大於y;
- randint(a, b):用於生成一個指定範圍內的整數,參數a是下限,參數b是上限,a必須<=b,生成的隨機數n: a <= n <= b;
- shuffle(lst):將列表中元素隨機排序;
4.條件控制
4.1 if語句
- python中用 elif 代替 else if;格式爲 if-elif-else;
- 每一個條件後面要用冒號 :
- python中沒有switch-case語句。
5.循環語句
- python中的循環語句有:for,while;沒有do..while。
5.1 while循環
- while語句的形式以下:
while 判斷條件: 語句
- 無限循環:能夠經過設置條件表達式永遠不爲false來實現無限循環;
- 能夠用CTRL+C退出無限循環;
- 無限循環在服務器上客戶端的實時請求很是有用。
- while循環能夠使用while....else語句:在while條件語句爲false時執行else模塊。
5.2 for循環
- Python for循環能夠遍歷任何序列的項目,如一個列表或者一個字符串。
- for循環通常格式以下:
for <variable> in <sequence>: <statements> else: <statements>
5.3 range()函數
- 須要遍歷數字序列,能夠使用內置range()函數。它會生成數列。
- 實例1:
for x in range(5): print(x)
結果是 0 1 2 3 4函數
- 實例2,用range指定區間的值(結果左閉右開):
for x in range(5,9): print(x)
結果是 5 6 7 8
- 能夠使range以指定數字開始並指定不一樣的增量(甚至能夠是負數,即'步長');
- 能夠使用range()函數來建立一個列表:list(range(5)) # [0, 1, 2, 3, 4]
5.4 break,continue及循環中的else子句
- break:能夠跳出for和while的當前循環體;若是循環被break終止,則對應的else塊也不會再執行;
- continue:被用來告訴Python跳過當前循環塊中的剩餘語句,而後繼續進行下一輪循環。
5.5 pass語句
- Python pass是空語句,是爲了保持程序結構的完整性。
- pass 不作任何事情,通常用作佔位語句。
6.迭代器與生成器
6.1 迭代器
- 迭代:是訪問集合元素的一種方式;
- 迭代器:是一個能夠記住遍歷的位置的對象;
- 迭代器對象:從集合的第一個元素開始訪問,直到全部元素被訪問完結束。迭代器只能往前不能後退;
- 迭代器:有2個基本方法,iter() 和 next();
- 字符串,列表,元組對象:均可以建立迭代器;
- 迭代器對象:能夠用 for 循環進行遍歷。
6.2 建立一個迭代器
- 把一個類做爲迭代器使用,須要在類中實現2個方法:__iter__(),__next__();
- __iter__()返回一個特殊的迭代器對象,該對象實現了__next__()方法並經過StopIteration異常標識迭代的完成:raise StopIteration;
- __next__()返回下一個迭代器對象(python2中爲next());
6.3 生成器
- 生成器(generator):即python中,使用了yield的函數;
- 與普通函數不一樣,生成器是一個返回迭代器的函數,只能用於迭代操做;
- 調用生成器運行過程當中,每次遇到yield時函數會暫停並保存當前的全部運行信息,返回yield的值,並在下一次執行next()方法時從當前位置繼續運行;
- 調用一個生成器函數,返回的是一個迭代器對象。
7. 函數
7.1 參數傳遞
- python中,類型屬於對象,變量是沒有類型的,變量只是一個對象的引用;
- 傳不可變對象:相似C++的值傳遞,如整數,字符串,元組。如a = 5;fun(a):傳遞的只是a的值,沒有影響a對象自己。好比在fun(a)內部修改a的值,只是修改另外一個複製的對象,並不會影響a自己;
- 傳可變對象:相似C++的引用傳遞,如列表,字典。如la=[1,2],fun(la):是將la真正傳過去,修改後fun外部的la也會受到影響。
7.2 參數
- 必需參數:須要以正確順序傳入參數;調用時的數量須要和聲明時一致;
- 關鍵字參數:容許函數調用時參數順序與聲明時不一致,由於能用參數名匹配參數值;
- 默認參數:調用函數時,若是沒有傳參,則會使用默認參數;
- 不定長參數:函數聲明時,加了 * 的參數會以元組的形式導入,存放全部未命名的變量參數;還有一種是帶2個星號 ** 的參數,是以字典形式導入;
- 聲明函數時,參數中的 * 能夠單獨出現,如:def f(a,b,*,c);若是單獨出現星號,則 * 後的參數必須用關鍵字傳入,如:f(1,2,c=3);
7.3 匿名函數
- 匿名函數:python用lambda 來建立匿名函數;不使用def 語句來定義;
- lambda只是一個表達式,而非代碼塊;
- lambda函數擁有本身的命名空間,不能訪問本身參數列表以外或全局命名空間的參數;
- 語法:lambda [arg1 [,arg2,.....argn]]:expression;如:sum = lambda arg1, arg2: arg1 + arg2。
7.4 變量做用域
7.4.1 python中的4種做用域
- L (Local):局部做用域;
- E (Enclosing):閉包函數外的函數中;
- G(Global):全局做用域;
- B(Bulit-in):內置做用域,即內置函數所在模塊的範圍;
- 按照L-E-G-B的順序查找;
- B 內置做用域:經過名爲bulitin的標準模塊來實現,須要導入builtins文件才能使用:import builtins。
7.4.2 global和nonlocal關鍵字
- 內部做用域要修改外部做用域的變量,則內部做用域內中要用global聲明該變量;
- 內部做用域要修改嵌套做用域(enclosing,外層非全局做用域)中的變量,則內部做用域內中要用nonlocal聲明該變量。
8. 數據結構
8.1 列表
- 列表的方法中,相似insert,remove,sort等修改列表的方法沒有返回值;可是 pop([i]) 比較特殊,會返回移除的元素值;
- list.pop([i]) :從列表指定位置移除元素,並返回元素值;不指定索引,則返回最後一個元素。(方法中 i 兩邊的方括號表示這個參數是可選的,而不是須要輸入一對方括號)。
8.2 列表當堆棧用
- 堆棧特色:先進後出,後進先出;
- 用append() 方法能夠把一個元素添加到堆棧頂;
- 用不指定索引的pop() 方法能夠把一個元素從堆棧頂釋放出來。
8.3 列表當隊列用
- 隊列特色:先進先出,後進後出;
- 用列表當隊列用,效率並不高。在列表最後添加或彈出元素速度快,可是在列表裏插入或從頭部彈出元素速度並不快(由於全部其餘元素須要一個一個移動)。
- 實例:
>>> from collections import deque >>> queue = deque(['aaa','bbb','ccc']) >>> queue.append('ddd') >>> queue.append('eee') >>> print(queue) deque(['aaa', 'bbb', 'ccc', 'ddd', 'eee']) >>> queue.popleft() 'aaa' >>> queue.popleft() 'bbb' >>> print(queue) deque(['ccc', 'ddd', 'eee']) >>>
8.4 列表推導式
- 列表推導式:提供了從序列建立列表的簡單途徑;
- 列表推導式結構:由一對方括號所包含的如下內容:一個表達式,後面跟一個
for
子句,而後是零個或多個for
或if
子句; - 列表推導式結果:其結果將是一個新列表,由對錶達式依據後面的
for
和if
子句的內容進行求值計算而得出; - 若是但願表達式推導出一個元組,就必須使用括號()。
- 實例:
>>> [x * 2 for x in [2,3]] [4, 6] >>> [(x,x**2) for x in [2,3,4] ] [(2, 4), (3, 9), (4, 16)] >>> [x for x in [2,3,4] if x >2] [3, 4] >>> [x+y for x in [1,2] for y in [35,6]] [36, 7, 37, 8] >>>
8.5 嵌套列表解析
- 實例:3X4的矩陣列表轉換成4X3列表:。。。。
8.6 del語句
- del語句:從列表中依索引而不是值來刪除一個元素,不返回值;pop([i])會返回值;
- del語句:能夠從列表刪除一個切割,或者清空整個列表,還能夠刪除實體變量;
- 實例:
>>> a=[4,5,6,7,8,9] >>> del a[1] >>> a [4, 6, 7, 8, 9] >>> del a[1:3] >>> a [4, 8, 9] >>> del a[:] >>> a [] >>> del a >>> a Traceback (most recent call last): File "<pyshell#18>", line 1, in <module> a NameError: name 'a' is not defined >>>
8.7 元組和序列
- 元組:由若干逗號分隔的值組成;
- 元組:輸出時總有括號() 的;可是輸入時能夠有() 也能夠沒有();可是輸入時,元組是更大表達式的一部分,則一般要加()。
8.8 集合
- 集合也支持推導式:
>>> {x for x in 'abcddcba' if x not in 'ab'} {'d', 'c'} >>>
8.9 字典
- 字典推導能夠建立任意鍵值的表達式字典:
>>> {x:x**2 for x in [1,2,3]} {1: 1, 2: 4, 3: 9} >>> {x:x**2 for x in (1,2,3)} {1: 1, 2: 4, 3: 9}
- 若是關鍵字只是簡單的字符串,使用關鍵字參數指定鍵值對有時候更方便:
>>> dict(aa=1,bb=2) {'aa': 1, 'bb': 2} >>>
8.10 遍歷技巧
- 在字典中遍歷時,關鍵字和值能夠用items() 方法同時取出來;
- 在序列中遍歷時,索引位置和值能夠用enumerate() 函數同時獲得;
- 同時遍歷2個或更多序列,能夠用zip() 組合;
- 反向遍歷一個序列,能夠先指定序列,再用reversed() 函數;
- 按順序遍歷一個序列,用sorted() 函數返回一個已排序的序列,並不修改原值。
9. 文件I/O
9.1 輸入
- raw_input([prompt]):從標準輸入讀取一個行,並返回一個字符串(去掉結尾的換行符);
- input([prompt]):能夠接收一個python表達式做爲輸入,並將運算結果返回。
10. 錯誤和異常
10.1 異常處理
- try/except:1個try語句可能包含多個except子句,分別處理不一樣特定的異常;最多隻有1個分支被執行。
- try/except..else:else可選,else子句在try子句沒有發生任何異常時執行。
- try/finally:不管是否異常,都會執行最後的代碼
10.2 拋出異常
- raise:拋出異常