这周有一个项目要用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']