美文网首页
python编码总结

python编码总结

作者: 腩啵兔子 | 来源:发表于2017-01-22 14:20 被阅读44次

    目前我们项目代码注释少、代码风格差异大,会导致交接时间长、交接后故障多的问题。针对这种情况,我们应该统一代码风格,增加代码注释,减少交接维护的成本。在此,总结了一些有用的Python规范,欢迎大家补充。

    编码规范

    严格的pep8规范太繁琐,推荐使用谷歌规范,此规范提供了一套简洁有效的注释和编码风格,上手十分容易。而且pycharm会针对注释做一些静态检查,可以进一步降低代码问题。以下是根据经验添加的一些补充。

    函数注释

    我们的项目几乎没有函数注释,一些关键性的函数添加合适的注释是十分有必要的,不需要太多的解释,只需要正确的表明入参类型和含义、返回参数类型和含义以及可能出现的异常。这些信息对刚上手的人来说十分有用,不仅可以快速读懂,而且也更方便地定位问题和代码检视。举例如下:

    def del_message(consumer_id, message_id):
        """删除消息
    
        Args:
            consumer_id (int): 接收人id
            message_id (int): 消息id
    
        Returns:
            code (string): 操作返回码
        """
        code, _ = mysql_model.delmsg(consumer_id, message_id)
        mysql_model.querymsg.invalidate_consumer(consumer_id)
        redis_model.del_unread_message(consumer_id, [message_id])
        return code
    

    pycharm的审阅功能会根据注释仲标注的类型检查代码,如果不匹配,会有颜色标记,可以更早的发现问题。

    import

    除了不要将多个模块或者符号放在一行导入的规则以外,也需要对导入模块的顺序做一个规范:按照python自带模块、第三方模块、项目模块的顺序导入,在管理模块的时候会更有条理。举例如下:

    import time
    import ujson
    import functools
    
    from retrying import retry
    
    from msgcenter.models import (
        mysql_model,
        push_model,
        redis_instance,
    )
    from msgcenter.core import constants
    from msgcenter.pb import (
        stub,
        urlsitter_pb2,
    )
    

    字符串拼接

    不要使用%和+拼接字符串,推荐使用format拼接。

    '{}{}'.format(a, b)
    

    原因是format比%拼接针对动态类型有更好的容错处理,而+运算符拼接字符串会有不必要的内存拷贝,性能不高。

    性能改进

    使用正确的模块和函数提升性能。

    循环

    • 用xrange替换range
    • 遍历字典时,用iteritems替换items
    • 简单的循环逻辑,用列表推导或者map/reduce/filter替换for/while循环

    第三方c扩展库相对原生库性能更好:

    • ujson替换json
    • cPickle替换pickle
    • cStringIO替换stringIO
    • cProfile替换profile
    • 大数据情况下用numpy替换原生list操作

    内存

    • tuple相对list占用内存更少,针对不会改变数据的场景使用tuple
    • 列表仲的字符串拼接避免使用+操作,可以使用join函数,eg: ','.join(a)
    • 常用的整数枚举值定义在[-5, 255]范围内
    • 不需要继承的类定义__slot__

    其他

    • set和dict的in操作时间复杂度是O(1), list和tuple是O(n)
    • dict对象以string类型数据作为key
    • dict操作以1 in a替换a.has_key(1)
    • 禁止更改python默认编码格式,编码问题有其他更好的解决方案
    • 禁止修改sys.path, 导入问题可以通过设置环境变量PYTHONPATH解决
    • 复杂的sql拼接可以用orm替换,参考gitlab kingkong项目

    相关文章

      网友评论

          本文标题:python编码总结

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