這周有一個項目要用python來寫,沒有辦法,只好學習這個東西了。比起C#+VS.Net這種黃金組合來,python+vi用起來還是非常不舒服,但是工作還是比興趣更重要,不喜歡也要硬學。
首先感覺python在總體概念上和C#有很多相似的地方,比如也要生產中間byte code.
1,奇怪的運算子號: divmod
>>> (a, b) = divmod(10,3)
>>>print a, b 就是 3 1
2,邏輯運算式:
和C一樣,沒有boolean類型,false可以用下面的東西來表示: None, 0, 0.0, '',"",[],(),{}來表示。
3,文法以縮排來區分,要特別小心。
4, list, 和C#中的arraylist差不多。用[]表示
a=[ 'a', 'b' ],那麼a[0]='a', a[1]='b',用len(a)可以得到list的長度,2。
5,子list的提取,可謂花樣繁多。
a=[1,2,3,4,5]
a[1,4] = [2,3,4] 實際上就是a[1],a[2],a[3],注意,不包括後面的a[4].
a[-1]=5, -表示從後面取。
a[:]是全部
a[:3]是a[0],a[1],a[2]
a[3:]是從a[3]後面的所有的,就是a[3],a[4]
a[1:-1] 就是a[1],a[2],a[3], 不包括a[-1](即a[4])
6,處理list的方法
a=[0,1,2,3,4,5]
a.append(6),那麼a=[0,1,2,3,4,5,6]
a.acount(1) = 1,用來計算1在這個list中出現的次數。
len(a)是長度,這時候=7
a.extend 還可以把list當參數,比如a.extend([7,8])
a.index(6)返回6在這個list中的位置,=6,如果你a.index(10),就會拋出一個異常,我也不知道為什麼象其他語言一樣,返回-1,這個就是我以前說的程式語言中的方言。
a.insert(0, -1)在0的位置插入-1,這時候a=[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
a.pop(),刪除並返回最後一個元素。 a.pop()=8,這時候a=[-1, 0, 1, 2, 3, 4, 5, 6, 7]
a.pop(1),可以pop出a[1]。a.pop(0)是pop出a[0]
a.remove(7),找到第一個7,然後刪除這個找到的7,這時候a=[-1, 0, 1, 2, 3, 4, 5, 6]
a.reverse(),順序顛倒,這時候a=[6, 5, 4, 3, 2, 1, 0, -1]
a.sort()排序,這時候 a 會以大小排序,a=[-1, 0, 1, 2, 3, 4, 5, 6]
a.sort(fun)象C#一樣,也可以排序函數。
就這些操作函數了,如果你象知道所有的對a的操作函數,dir(a)會給你列出來。比如這裡等於:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__repr__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
7,針對list的一個新奇的迴圈
[ express1 for k in list if express2]
比如: a=[1,2,'a']
[k+1 for k in a if type(k)==types.IntType ] 會得到[2,3],當然首先要import types
8,字串
"""就是HERE Document.比如
"""
line1
line 2
"""
特殊符號。\u{xxxx} unicode, \xhh,十六進位, \0 8進位。
針對字串的轉換:
float(str),轉換為float, a='2.3', float(a) = 2.3
int(str), 轉換為int,注意必須要能轉換為int, a='2.3', int(a)會出錯。a='2.0', int(a)也出錯。a='2'就不出錯了
int(str, base)根據進位轉。 a=‘15’, int(a,8) = 13,意思是把8進位的15轉換為10進位的13,最後結果一定是10進位。
long(str), long(str,base)轉換為long型。
字串操作:
串連: +, 'hello' + ' ' + 'world'
capitalize()首字母變成大寫. 'hello world'.capitalize() = 'Hello world'
lower()變成小寫,upper()變成大寫, swapcase()大小寫互換。
len()得到字串長度,a='abc', a[0]='a', a[-1]='c'
判斷字串的類別:
str.isalnum(), 匹配0-9,a-zA-Z
str.isalpha(), a-zA-Z
str.isdigit(), 0-9
str.islower(), a-z
str.isupper(), A-Z
str.istitle(),首字母大寫
str.isspace(),空白字元
字串尋找:
a.find('a')找'a'的位置,找不到返回-1
a.find('a', 1)從a[1]開始找
a.find('a', 1, 3),從a[1]到a[3]的這段找。
a.rfind()從後面找
s.index()和find()一樣,找不到會返回異常
s.rindex()從後面找
s.count('a'),出現的次數。
字串合并和分解:
str.join(words), s.split(' ')
'\n'.join(['a','b','c']) = 'a\nb\nc'
'have a good day'.split(' ') = ['have', 'a', 'good', 'day']