查漏补缺

2017-06-20  本文已影响0人  thinkpp

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

上一篇下一篇

猜你喜欢

热点阅读