• python编码规范


    1.换行
    每行不超过80个字符
    圆括号,中括号,花括号会将行隐式连接,反斜杠也会进行隐式连接
    反斜杠可以控制换行

    #python代码规范
    def foo(argv1,argv2,
                argv3):
        print '%s,%s,%s'%(argv1,argv2,argv3)
        args=['a','b',
                'c']
        print args
        dictobj={'name':'python',
                    'score':'8.5'}
        print dictobj
    foo(1,2,3)

    运行结果:

    #python代码规范
    obj="""sdfsdfsdfsdf
    23424324234"""
    print obj
    obj2=('sdfsdfsdfsdf'
    '23424324234')
    print obj2
    obj3=1+
         2
    print obj3

    运行结果:

    三个双引号,表示引号内的为一个字符串,
    括号表示可以将两个字符串隐式连接成一个。

    2.不要在返回语句,条件语句中使用括号

    # #python代码规范
    def func(foo):
        if foo:
            return 'yes'
        if not foo:
            return('no')
    print func(False)

    3.缩进
    不要使用tab缩进,使用空格
    4.空格
    1)#注释符后面加一个空格
    2)list,dict,tuple,set中,:后面加空格
    3)+-*/两端加空格
    4)参数列表中的=,括号不需要加空格

    # 列表
    list1 = [1, 2, 3]
    # 字典
    dict1 = {'a': '1', 'b': '2','c': '3'}
    # 元组不可更改,元素可重复
    tup1 = ('a', 'a')
    # 集合元素不可重复
    set1 = ('a', 'b')
    # 操作符两端加空格
    val1 = val2 + val3
    # 参数列表中的=两端不需要空格,括号两端不需要空格
    def func1(a=1, b=2):
        return a+b

    5.命名
    Class类,使用紧凑双驼峰法,如MyClass
    其余使用小写, 中间用下划线_连接,如:my_func,my_variable
    6.导入import
    1)import放在文件开头,导入顺序为
    标准库
    第三方库
    本项目的package,module
    2)不要使用from foo import *,使用from foo import func1,var1
    3)不要使用隐式的相对导入,最好使用全路径导入

    import sys
    import os
    
    from tornado.web import RequestHandler
    
    from mymessage import var1,var2

    7.异常
    1)只在可能异常的地方使用try/except
    8.字符串
    1)使用join拼接字符串
    2)使用str类型方法,而不是string模块的方法
    3)使用startswith和endswith比较前缀和后缀
    4)使用format方法格式化字符串
    9.比较
    1)空的list,str,tuple,set,dict和0,0.0,None都是False
    2)使用if some_list而不是if len(some_list)判断某个list是否为空
    3)使用is,is not和单例(如None)进行比较,而不是==或!=
    4)使用if a is not None而不是if not a is None
    5)不要用==或!=和True或False比较
    6)使用in操作,如key in dict而不是dict.has_key()
    7)list的查找是线性的,复杂度为o(n),set底层是hashtable,复杂度为o(1),但比list占用更多内存空间
    8)使用列表表达式,字典表达式,生成器

    l=["egg%s"%i for i in range (100) if i >90 and i<95]
    print(l)
    dict1={'a': '1', 'b': '2'}
    l=[item for item in dict1]
    print l
    g = (x * x for x in range(10))
    print g

    运行结果:

    9.dict的get方法可以指定默认值,[]可以抛出Keyerror

    dict.get(key, default=None)

    10.使用for item in list迭代list,for index,item in enumerate(list)迭代下标和lis

    l=['a','b','c']
    for item in l:
        print item
    for index,item in enumerate(l):
        print index,item

    运行结果:

    11.使用内建函数sorted和List.sort()进行排序

    aList = [123, 'xyz', 'zara', 'abc', 'xyz']
    print sorted(aList)
    aList.sort()
    print aList

    运行结果:

    List.sort()在原列表上进行排序
    sorted()产生一个新的列表
    12.使用lambda表达式

    g=lambda x:x+1
    print g(1)

    运行结果:

    lambda表达式相当于定义了一个匿名函数,参数为x,函数体为return x+1,如

    def g(x):
        return x+1

    13.使用defaultdict ,Counter等冷门但好用的数据结构
    14.使用装饰器
    装饰器一般提供和函数本身功能无关的功能,如插入日志等。
    不带参数装饰器:

    import datetime
    def mylog(func):
        def wrapper(*args, **kw):
            print "log %s"%datetime.datetime.now().strftime('%Y-%m-%d')
            return func(*args, **kw)
        return wrapper
    @mylog
    def add(a,b):
        print a+b
    add(1,2)

    运行结果:

    带参数装饰器:

    import datetime
    def mylog(name):
        def decorator(func):
            def wrapper(*args, **kw):
                print "%s log %s"%(name,datetime.datetime.now().strftime('%Y-%m-%d'))
                return func(*args, **kw)
            return wrapper
        return decorator
    @mylog('process1')
    def add(a,b):
        print a+b
    add(1,2)

    运行结果:

    15.使用with处理上下文
    16.有时候对类型不要做太过严格的限制,适当利用Python的鸭子类型(Duck Type)
    17.使用logging记录日志,配置好格式和级别

  • 相关阅读:
    virtualbox 5.0.6 在debian jessie amd64启动报错
    golang中的检验hash
    删除多余的自编译的内核、mysql连接不了的问题
    scoket常用函数简单介绍
    我的bootstrap学习
    TCP/IP四层模型和OSI七层模型
    五种调试方法
    实现对一个8bit数据的指定位的置0或者置1操作,并保持其他位不变。
    如何测试一个杯子
    黑白盒测试及区别、测试用例的设计(测试小笔记)
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7247564.html
Copyright © 2020-2023  润新知