Day One
Python特點:優雅?明確?簡單
Python適合領域:Web 腳本 “膠水工具”
Python不適合領域:硬件開發 游戲開發 移動應用
Python特點:解釋性語言 不用編譯 代碼量少 速度慢 源碼不能加密
版本:2.7 第三方庫支持;?
? ? ? ? ? 3.3 較新
Day Two
16進制轉10進制:int('0x12fd45', 16)
print語句可以跟上多個字符串,用逗號“,”隔開,就可以連成一串輸出,逗號表現為空格
注釋:開頭加“#”
轉義:“\”,常用轉義字符:\n 表示換行,\t 表示一個制表符 ,\\ 表示 \ 字符本身
多行字符串表示:用'''...'''表示
忽略轉義:raw字符串,用“r+字符串”表示
Unicode:把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
以Unicode表示的字符串用u'...'表示,如:print u'中文'
注意:如果中文字符串在Python環境下遇到 UnicodeDecodeError,這是因為.py文件保存的格式有問題。可以在第一行添加注釋
# -*- coding: utf-8 -*-
整數和浮點數混合運算的結果就變成浮點數
整數運算的結果永遠是精確的,而浮點數運算的結果不一定精確
11 / 4? ? # ==> 2,整數除法得到整數
11 % 4? ? # ==> 3,求余
11.0 / 4? ? # ==> 2.75,浮點數除法,結果為浮點數
短路計算:Python解釋器在做布爾運算時,只要能提前確定計算結果,它就不會往后算了,直接返回結果。
list:Python內置的數據類型。list是一種有序的集合,可以隨時添加和刪除其中的元素。
Day Three
按照索引訪問list:索引從 0 開始;使用索引時,千萬注意不要越界
倒序訪問list:用 -1 這個索引來表示最后一個元素,-2表示倒數第二,以此類推
list添加新元素:
append(),把新的元素添加到 list 的尾部;用法:L.append(新元素)
insert()方法,它接受兩個參數,第一個參數是索引號,第二個參數是待添加的新元素。
從list刪除元素:
pop()方法總是刪掉list的最后一個元素,并且它還返回這個元素;
pop(2)將第三位刪除掉
tuple:有序列表,tuple一旦創建完畢,就不能修改了。
創建tuple和創建list唯一不同之處是用( )替代了[ ]。
創建單元素tuple:需要注意在元素的后面加上“,”;多元素 tuple 加不加這個額外的“,”效果是一樣的。
tuple中可以包含可變的list
Day Four
Python代碼的縮進規則:具有相同縮進的代碼被視為代碼塊;4個空格,不要使用Tab,更不要混合Tab和空格
注意:Python交互環境下敲代碼,還要特別留意縮進,并且退出縮進需要多敲一行回車
if:if 語句后接表達式,然后用:表示代碼塊開始
if ... else ... 語句:非此即彼;注意: else 后面有個“:”
if ... elif ... else ... 語句:這一系列條件判斷會從上到下依次判斷,如果某個判斷為 True,執行完對應的代碼塊,后面的條件判斷就直接忽略,不再執行了
for循環:for name in L:name 這個變量是在 for 循環中定義的,意思是,依次取出list中的每一個元素,并把元素賦值給 name,然后執行for循環體,可以遍歷list或者tuple
Day Five
用 for 循環或者 while 循環時,如果要在循環體內直接退出循環,可以使用 break 語句。
在循環過程中,可以用break退出當前循環,還可以用continue跳過后續循環代碼,繼續下一次循環。
Day Six
dict:建立對應關系
dict訪問:使用 d[key] 的形式來查找對應的 value,這和 list 很像,不同之處是,list 必須使用索引返回對應的元素,而dict使用key;print d.get('Bart')也可以用
注意:一起打印不同類型數據時,用“,”分開
dict內部是無序的,不能用dict存儲有序的集合。
dict的特點是作為 key 的元素必須不可變
dict是可變的,也就是說,我們可以隨時往dict中添加新的 key-value。如果 key 已經存在,則賦值會用新的 value 替換掉原來的 value
遍歷dict:for key in d:
set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重復,而且是無序的,這點和 dict 的 key很像。set不能包含重復的元素
如果傳入有重復,set會自動去掉重復的元素.
訪問set:由于set存儲的是無序集合,所以我們沒法通過索引來訪問。訪問 set中的某個元素實際上就是判斷一個元素是否在set中:'Bill' in s
重要:大小寫很重要,'Bart' 和 'bart'被認為是兩個不同的元素。
set的特點適合的應用:遍歷速度快,可表示星期
遍歷set:for 循環在遍歷set時,元素的順序和list的順序很可能是不同的,而且不同的機器上運行的結果也可能不同。
set添加元素時,用set的add()方法;刪除set中的元素時,用set的remove()方法
Day Seven
Python官方網站:http://docs.python.org
可以在交互式命令行通過 help(abs) 查看abs函數的幫助信息
int()函數可以把其他數據類型轉換為整數;str()函數把其他類型轉換成 str
高級程序用法:L = xrange(1, 101); print sum([i*i for i in L])
定義一個函數要使用 def 語句:依次寫出函數名、括號、括號中的參數和冒號:,然后,在縮進塊中編寫函數體,函數的返回值用 return 語句返回。
return None可以簡寫為return
返回多值:a的平方:a**2
遞歸:在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
遞歸函數的優點是定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰,遞歸要有塊的思想
使用遞歸函數需要注意防止棧溢出
函數的默認參數的作用是簡化調用
由于函數的參數按從左到右的順序匹配,所以默認參數只能定義在必需參數的后面
定義可變參數:如果想讓一個函數能接受任意個參數,我們就可以定義一個可變參數:
def fn(*args):%注意帶星號
print args
可變參數也不是很神秘,Python解釋器會把傳入的一組參數組裝成一個tuple傳遞給可變參數,因此,在函數內部,直接把變量 args 看成一個 tuple 就好了。
要使用浮點數進行運算:使用“*1.0”
切片:L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素
如果第一個索引是0,還可以省略;只用一個 : ,表示從頭到尾;切片操作還可以指定第三個參數:第三個參數表示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個,注意這是第三個參數
range()函數可以創建一個數列:
>>> range(1, 101)
[1, 2, 3, ..., 100]
Day Eight
倒序切片:L[-3:-1]:從倒數第三個開始到最后一個(不包含),記住倒數第一個元素的索引是-1。倒序切片包含起始索引,不包含結束索引。
Python 的 for循環不僅可以用在list或tuple上,還可以作用在其他任何可迭代對象上
注意: 集合是指包含一組元素的數據結構,我們已經介紹的包括:
1. 有序集合:list,tuple,str和unicode;
2. 無序集合:set
3. 無序集合并且具有 key-value 對:dict
迭代是一個動詞,它指的是一種操作,在Python中,就是 for 循環。
Python中,迭代永遠是取出元素本身,而非元素的索引。
索引迭代:for index, name in enumerate(L): print index, '-', name
zip()函數可以把兩個 list 變成一個 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
迭代dict的value:dict 對象有一個 values() 方法,這個方法把dict轉換成一個包含所有value的list:用法:d.values();itervalues() 方法也是類似功能,但占用內存少
如果一個對象說自己可迭代,那我們就直接用 for 循環去迭代它,可見,迭代是一種抽象的數據操作,它不對迭代對象內部的數據有任何要求。
Day Nine
列表生成式: >>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
注意:range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...]
列表生成式的 for 循環后面還可以加上 if 判斷
注意:仔細區分數字和字符串