1 Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换
2 写 u'中' 和 u'\u4e2d' 是一样的,\u后面是十六进制的Unicode码。因此,u'A'和u'\u0041'也是一样的。把 u'xxx' 转换为UTF-8编码的'xxx'用encode('utf-8')方法:
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
3 list 删除:要删除指定位置的元素,用pop(i)方法,其中i是索引位置
4 tuple 定义一个元素时,为了避免歧义:所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
>>> t = (1,)
>>> t
(1,)
5 set 要创建一个set,需要提供一个list作为输入集合
6 函数参数:定义默认参数要牢记一点:默认参数必须指向不变对象!
要修改上面的例子,我们可以用None这个不变对象来实现:
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
所以,我们把函数的参数改为可变参数:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
如果传入参数是个list可用如下方式:
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
关键字参数
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
调用的时候:
>>> func(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> func(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> func(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
7 切片操作:
字符串'xxx'或Unicode字符串u'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'
8 列表生成式
>>> [x * x for x in range(1, 11) if x % 2 == 0]
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
9 map reduce
>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> def fn(x, y):
... return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579
9 sys包
import sys
args = sys.argv
10 type
但是这种写法太麻烦,Python把每种type类型都定义好了常量,放在types模块里,使用之前,需要先导入:
>>> import types
>>> type('abc')==types.StringType
True
>>> type(u'abc')==types.UnicodeType
True
>>> type([])==types.ListType
True
>>> type(str)==types.TypeType
True
我们要判断class的类型,可以使用isinstance()函数。
>>> isinstance(h, Dog)
True
11 try:
try:
print 'try...'
r = 10 / 0
print 'result:', r
except ZeroDivisionError, e:
print 'except:', e
finally:
print 'finally...'
print 'END'
12 logging
Python内置的logging模块可以非常容易地记录错误信息:
import logging
def foo(s):
return 10 / int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except StandardError, e:
logging.exception(e)
main()
print 'END'
13 断言
assert n != 0, 'n is zero!'
14 单元测试
为了编写单元测试,我们需要引入Python自带的unittest模块
15 文档测试
并且,Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试。
doctest严格按照Python交互式命令行的输入和输出来判断测试结果是否正确。只有测试异常的时候,可以用...表示中间一大段烦人的输出。
16 文件操作:
with open('/path/to/file', 'r') as f:
print f.read()
17 幸运的是shutil模块提供了copyfile()的函数,你还可以在shutil模块中找到很多实用函数,它们可以看做是os模块的补充。
18 序列化 pickle 和json