昨天又把python拿出來複習一下
我是看"byte of python"這個電子書, 網路上可以下載到
python是一個很有趣的動態語言
compiler interpreter
py --------> pyc(bytecode) -----------> binary code
pyc只是加快速度的手段, 執行的話是直接從.py去執行
以module架構整個程式
如果說JAVA是以class為基本元件, Python無疑是以module為元件
當然module中也可以定義函式或是類別
python是一個物件導向程式語言, 具有物件, 可以繼承, 多型
在宣告時所有的東西都是物件
更精確的說都是"object"這個class
藉由constructor或是一些built-in的(如 =123 表示數字或是 ='abc'表示字串)來達到多型
在宣告時不需要指定其類別
a = 10 #數字
b = 'bc' #字串
c = test(10) # c 是test這個class的一個物件
至於所有的reference都是object
大概是這樣 指向
object(做GC,或是一些資源管理) ------> 本體
在程式的撰寫上相當精簡
利用縮排來表示block, 挺聰明的作法..嘿
這樣就可以避免看code看到眼花, 有些人的寫作風格實在是不敢領教
判斷或是迴圈的描述如下
if a == b:
print 'yes'
elif:
print 'no'
while True:
prnit 'hello'
for obj in range(1, 10):
print obj
跟C還是有點像, 值得一提的是他的 for ... in
提供一個探訪循序資料結構的方法
python 提供了3種內建的資料結構, 相當實用
list -> alist = ['a', 'b', 'c'] #底層應該是linked list, 可以用del刪除節點
tuple -> atuple = ('a', 'b', 'c') #不可變更的list
可以用於字串處理 '%d%d%d' % ('1','2',3') -> '123'
dict -> adict = {'a':1, 'b':2, 'c':3} #hash table
另外還有對循序資料結構進行存取的方法
alist[:] -> 表示從頭到尾
alist[3:] ->從第三的元素到結束
這些存取方式都是複製一份reference出來
物件導向的部份
很單純, 很像用C寫物件導向..尤其是那個method還要提供個self這個參數XD
但語法上還算ok, 跟java一樣所有override的方法都屬於virtual
藉由特殊名稱的method來達到建構,解構,還有運算子複寫 ..ex. __init__, __del___ , __lt__
IO部份,packle這個module提供了dump跟load
那麼我想所有的object都實作了類似java的序列化介面吧.(不確定)
其他部分, 像是
lista = [2, 3, 4]
listb = [i*2 for i in lista if i > 3] #非常牛b的寫法, 實在是粉語意
print listb
還有
def powsum(power, *args):
t = 0
for i in args:
t += pow(i, power)
return t
print powsum(2, 2, 3, 4) #2, 3, 4將會被視為tuple args傳遞
還有
lambda 這玩意相當新奇, 基本上就是動態產生一個function pointer
def power(order):
return lambda s : pow(s, order)
binary = power(2)
print binary(11)
像是這樣
exec用來執行字串形式的code, 用這個似乎可以來做reflection ?
exex 'print "hello"' = print hello
eval用來評估一個字串形式的表達式
eval '3*3' = 6
assert就是斷言,
其實就是做檢查判斷是否成立, 不成立就丟出例外
是一種錯誤處理機制
2008年7月12日 星期六
python
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言