美文网首页
查漏补缺

查漏补缺

作者: thinkpp | 来源:发表于2017-06-20 15:04 被阅读0次

    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

    相关文章

      网友评论

          本文标题: 查漏补缺

          本文链接:https://www.haomeiwen.com/subject/mzwoqxtx.html