Python 入門筆記

python教程發表於2019-07-16

enter image description here Python入門

希望大家喜歡

Python變數和資料型別 資料型別 print語句 註釋 Python的註釋以 # 開頭,後面的文字直到行尾都算註釋

這一行全部都是註釋...

print 'hello' # 這也是註釋 什麼是變數 定義字串 字串可以用''或者""括起來表示。

如果字串本身包含'怎麼辦?比如我們要表示字串 I'm OK ,這時,可以用" "括起來表示:Python入門到精通學習扣扣群

"I'm OK"類似的,如果字串包含",我們就可以用' '括起來表示:881228581歡迎加入

'Learn "Python" in imooc'如果字串既包含'又包含"怎麼辦?

這個時候,就需要對字串的某些特殊字元進行“轉義”,Python字串用\進行轉義。

要表示字串 Bob said "I'm OK".由於 ' 和 " 會引起歧義,因此,我們在它前面插入一個\表示這是一個普通字元,不代表字串的起始,因此,這個字串又可以表示為

'Bob said \"I\'m OK\".'注意:轉義字元 \ 不計入字串的內容中。

常用的轉義字元還有:

\n 表示換行 \t 表示一個製表符 \ 表示 \ 字元本身

raw字串與多行字串 我們可以在字串前面加個字首 r ,表示這是一個 raw 字串,裡面的字元就不需要轉義了。例如:

r'(~~)/ (~~)/'

但是r'...'表示法不能表示多行字串,也不能表示包含'和 "的字串(為什麼?)

如果要表示多行字串,可以用'''...'''表示:

'''Line 1 Line 2 Line 3''' 上面這個字串的表示方法和下面的是完全一樣的:

'Line 1\nLine 2\nLine 3'

還可以在多行字串前面新增 r ,把這個多行字串也變成一個raw字串:

r'''Python is created by "Guido". It is free and easy to learn. Let's start learn Python in imooc!'''

Unicode字串 轉義:

u'中文\n日文\n韓文' 多行:

u'''第一行 第二行''' raw+多行:

ur'''Python的Unicode字串支援"中文", "日文", "韓文"等多種語言''' 整數和浮點數 布林型別 List和Tuple型別 list 按照索引訪問list 倒序訪問list 新增新元素 第一個辦法是用 list 的 append() 方法,把新同學追加到 list 的末尾:

L = ['Adam', 'Lisa', 'Bart'] L.append('Paul') print L ['Adam', 'Lisa', 'Bart', 'Paul'] append()總是把新的元素新增到 list 的尾部。 方法二是用list的 insert()方法,它接受兩個引數,第一個引數是索引號,第二個引數是待新增的新元素:

L = ['Adam', 'Lisa', 'Bart'] L.insert(0, 'Paul') print L ['Paul', 'Adam', 'Lisa', 'Bart'] 從list刪除元素 最後一個元素,我們可以用list的pop()方法刪除: L = ['Adam', 'Lisa', 'Bart', 'Paul'] L.pop() 'Paul' print L ['Adam', 'Lisa', 'Bart'] pop()方法總是刪掉list的最後一個元素,並且它還返回這個元素,所以我們執行 L.pop() 後,會列印出 'Paul' 如果Paul同學不是排在最後一個怎麼辦?比如Paul同學排在第三:

L = ['Adam', 'Lisa', 'Paul', 'Bart'] 要把Paul踢出list,我們就必須先定位Paul的位置。由於Paul的索引是2,因此,用 pop(2)把Paul刪掉:

替換元素 替換時直接賦值

tuple tuple是另一種有序的列表,中文翻譯為“ 元組 ”。tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了。

建立tuple和建立list唯一不同之處是用( )替代了[ ]。

tuple沒有 append()方法,也沒有insert()和pop()方法。

建立單元素tuple 包含 0 個元素的 tuple,也就是空tuple,直接用 ()表示:

t = () print t () 建立包含1個元素的 tuple 呢?來試試:

t = (1) print t 1 好像哪裡不對!t 不是 tuple ,而是整數1。為什麼呢? 因為()既可以表示tuple,又可以作為括號表示運算時的優先順序,結果 (1) 被Python直譯器計算出結果 1,導致我們得到的不是tuple,而是整數 1。

正是因為用()定義單元素的tuple有歧義,所以 Python 規定,單元素 tuple 要多加一個逗號“,”,這樣就避免了歧義:

t = (1,) print t (1,) Python在列印單元素tuple時,也自動新增了一個“,”,為了更明確地告訴你這是一個tuple。 “可變的tuple” 前面我們看到了tuple一旦建立就不能修改。現在,我們來看一個“可變”的tuple:

t = ('a', 'b', ['A', 'B']) 注意到 t 有 3 個元素:'a','b'和一個list:['A', 'B']。list作為一個整體是tuple的第3個元素。list物件可以通過 t[2] 拿到:

L = t[2] 然後,我們把list的兩個元素改一改:

L[0] = 'X' L1 = 'Y' 再看看tuple的內容:

print t ('a', 'b', ['X', 'Y']) 條件判斷和迴圈 if語句 for迴圈 L = ['Adam', 'Lisa', 'Bart'] for name in L: print name

while迴圈

while x < N: print x x = x + 1

break與continue 在迴圈過程中,可以用break退出當前迴圈,還可以用continue跳過後續迴圈程式碼,繼續下一次迴圈。

多重迴圈 Dict和Set型別 什麼是dict 用 dict 表示“名字”-“成績”的查詢表如下:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } 我們把名字稱為key,對應的成績稱為value,dict就是通過 key 來查詢 value。

花括號 {} 表示這是一個dict,然後按照 key: value, 寫出來即可。最後一個 key: value 的逗號可以省略。

訪問dict d[key] 的形式來查詢對應的 value,這和 list 很像,不同之處是,list 必須使用索引返回對應的元素,而dict使用key:

注意: 通過 key 訪問 dict 的value,只要 key 存在,dict就返回對應的value。如果key不存在,會直接報錯:KeyError。

要避免 KeyError 發生,有兩個辦法:

一是先判斷一下 key 是否存在,用 in 操作符:

if 'Paul' in d: print d['Paul'] 如果 'Paul' 不存在,if語句判斷為False,自然不會執行 print d['Paul'] ,從而避免了錯誤。

二是使用dict本身提供的一個 get 方法,在Key不存在的時候,返回None:

print d.get('Bart') 59 print d.get('Paul') None dict的特點 查詢速度快,無論dict有10個元素還是10萬個元素,查詢速度都一樣。而list的查詢速度隨著元素增加而逐漸下降。 不過dict的查詢速度快不是沒有代價的,**dict的缺點是佔用記憶體大,還會浪費很多內容,list正好相反,佔用記憶體小,但是查詢速度慢。

由於dict是按 key 查詢,所以,在一個dict中,key不能重複。

儲存的key-value序對是沒有順序的!這和list不一樣:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } 當我們試圖列印這個dict時:

print d {'Lisa': 85, 'Adam': 95, 'Bart': 59} 列印的順序不一定是我們建立時的順序,而且,不同的機器列印的順序都可能不同,這說明dict內部是無序的,不能用dict儲存有序的集合。 **是作為 key 的元素必須不可變,Python的基本型別如字串、整數、浮點數都是不可變的,都可以作為 key。但是list是可變的,就不能作為 key。 可以試試用list作為key時會報什麼樣的錯誤。

不可變這個限制僅作用於key,value是否可變無所謂:

{ '123': [1, 2, 3], # key 是 str,value是list 123: '123', # key 是 int,value 是 str ('a', 'b'): True # key 是 tuple,並且tuple的每個元素都是不可變物件,value是 boolean } 最常用的key還是字串,因為用起來最方便。

更新dict 要把新同學'Paul'的成績 72 加進去,用賦值語句:

d['Paul'] = 72

遍歷dict 直接使用for迴圈可以遍歷 dict 的 key:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } for key in d: ... print key ... Lisa Adam Bart 什麼是set dict的作用是建立一組 key 和一組 value 的對映關係,dict的key是不能重複的。

有的時候,我們只想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重複,這時,set就派上用場了。

set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。

所以set可以作為dict的key

訪問set 訪問 set中的某個元素實際上就是判斷一個元素是否在set中。

例如,儲存了班裡同學名字的set:

`>>> s = set(['Adam', 'Lisa', 'Bart', 'Paul']) 我們可以用 in 操作符判斷:

Bart是該班的同學嗎?

'Bart' in s True set的特點 set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快。

set儲存的元素和dict的key類似,必須是不變物件,因此,任何可變物件是不能放入set中的。

set儲存的元素也是沒有順序的。

遍歷set 由於 set 也是一個集合,所以,遍歷 set 和遍歷 list 類似,都可以通過 for 迴圈實現。

直接使用 for 迴圈可以遍歷 set 的元素:

s = set(['Adam', 'Lisa', 'Bart']) for name in s: ... print name ... Lisa Adam Bart 更新set 新增元素時,用set的add()方法:

s = set([1, 2, 3]) s.add(4) print s set([1, 2, 3, 4]) 如果新增的元素已經存在於set中,add()不會報錯,但是不會加進去了:

s = set([1, 2, 3]) s.add(3) print s set([1, 2, 3]) 刪除set中的元素時,用set的remove()方法:

s = set([1, 2, 3, 4]) s.remove(4) print s set([1, 2, 3]) 如果刪除的元素不存在set中,remove()會報錯:

s = set([1, 2, 3]) s.remove(4) Traceback (most recent call last): File "", line 1, in KeyError: 4 所以用add()可以直接新增,而remove()前需要判斷。

函式 什麼是函式 呼叫函式 編寫函式 返回多值

r = move(100, 100, 60, math.pi / 6) print r (151.96152422706632, 70.0) Python的函式返回多值其實就是返回一個tuple,但寫起來更方便。

遞迴函式 漢諾塔

定義預設引數 定義可變引數 如果想讓一個函式能接受任意個引數,我們就可以定義一個可變引數:

def fn(*args): print args 可變引數也不是很神祕,Python直譯器會把傳入的一組引數組裝成一個tuple傳遞給可變引數,因此,在函式內部,直接把變數 args 看成一個 tuple 就好了。

切片 對list進行切片 取前N個元素,也就是索引為0-(N-1)的元素,可以用迴圈:

r = [] n = 3 for i in range(n): ... r.append(L[i]) ... r ['Adam', 'Lisa', 'Bart'] 對這種經常取指定索引範圍的操作,用迴圈十分繁瑣,因此,Python提供了切片(Slice)操作符,能大大簡化這種操作。

對應上面的問題,取前3個元素,用一行程式碼就可以完成切片:

L[0:3] ['Adam', 'Lisa', 'Bart'] L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素 只用一個 : ,表示從頭到尾:

L[:] ['Adam', 'Lisa', 'Bart', 'Paul'] 因此,L[:]實際上覆製出了一個新list。 切片操作還可以指定第三個引數:

L[::2] ['Adam', 'Bart'] 第三個參數列示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個。 把list換成tuple,切片操作完全相同,只是切片的結果也變成了tuple。

倒序切片 對字串切片 字串 'xxx'和 Unicode字串 u'xxx'也可以看成是一種list,每個元素就是一個字元。因此,字串也可以用切片操作,只是操作結果仍是字串

迭代 什麼是迭代 在Python中,如果給定一個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們成為迭代(Iteration)。

在Python中,迭代是通過 for ... in 來完成的

因為 Python 的 for迴圈不僅可以用在list或tuple上,還可以作用在其他任何可迭代物件上。

因此,迭代操作就是對於一個集合,無論該集合是有序還是無序,我們用 for 迴圈總是可以依次取出集合的每一個元素。

注意: 集合是指包含一組元素的資料結構,我們已經介紹的包括:

有序集合:list,tuple,str和unicode; 無序集合:set 無序集合並且具有 key-value 對:dict 而迭代是一個動詞,它指的是一種操作,在Python中,就是 for 迴圈。 索引迭代 **Python中,迭代永遠是取出元素本身,而非元素的索引。

對於有序集合,元素確實是有索引的。有的時候,我們確實想在 for 迴圈中拿到索引,怎麼辦?

方法是使用 enumerate() 函式:

L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in enumerate(L): ... print index, '-', name ... 0 - Adam 1 - Lisa 2 - Bart 3 - Paul 迭代dict的value dict 物件有一個 values() 方法,這個方法把dict轉換成一個包含所有value的list,這樣,我們迭代的就是 dict的每一個 value:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.values()

[85, 95, 59]

for v in d.values(): print v

85

95

59

如果仔細閱讀Python的文件,還可以發現,dict除了values()方法外,還有一個 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一樣:

*那這兩個方法有何不同之處呢?

values() 方法實際上把一個 dict 轉換成了包含 value 的list。

但是 itervalues() 方法不會轉換,它會在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節省了生成 list 所需的記憶體。

列印 itervalues() 發現它返回一個 物件,這說明在Python中,for 迴圈可作用的迭代物件遠不止 list,tuple,str,unicode,dict等,任何可迭代物件都可以作用於for迴圈,而內部如何迭代我們通常並不用關心。

迭代dict的key和value items() 方法把dict物件轉換成了包含tuple的list,我們對這個list進行迭代,可以同時獲得key和value:

for key, value in d.items(): ... print key, ':', value ... Lisa : 85 Adam : 95 Bart : 59 和 values() 有一個 itervalues() 類似, items() 也有一個對應的 iteritems(),iteritems() 不把dict轉換成list,而是在迭代過程中不斷給出 tuple,所以, iteritems() 不佔用額外的記憶體。

列表生成式 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我們可以用range(1, 11):

range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎麼做?方法一是迴圈:

L = [] for x in range(1, 11): ... L.append(x * x) ... L [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 但是迴圈太繁瑣,而列表生成式則可以用一行語句代替迴圈生成上面的list:

[x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 這種寫法就是Python特有的列表生成式。利用列表生成式,可以以非常簡潔的程式碼生成 list。

複雜表示式 假設有如下的dict:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } 完全可以通過一個複雜的列表生成式把它變成一個 HTML 表格:

tds = ['

%s%s' % (name, score) for name, score in d.iteritems()] print '' print '' print '\n'.join(tds) print '
NameScore
' 字串的join()方法可以把一個 list 拼接成一個字串

條件過濾 列表生成式的 for 迴圈後面還可以加上 if 判斷。例如:

[x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] 有了 if 條件,只有 if 判斷為 True 的時候,才把迴圈的當前元素新增到列表中。

多層表示式 for迴圈可以巢狀,因此,在列表生成式中,也可以用多層 for 迴圈來生成列表。

對於字串 'ABC' 和 '123',可以使用兩層迴圈,生成全排列:

[m + n for m in 'ABC' for n in '123'] ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'] 翻譯成迴圈程式碼就像下面這樣:

L = [] for m in 'ABC': for n in '123': L.append(m + n)

相關文章