Python3基礎知識

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:拋出異常
相關文章
相關標籤/搜索