美文网首页
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编码总结

    目前我们项目代码注释少、代码风格差异大,会导致交接时间长、交接后故障多的问题。针对这种情况,我们应该统一代码风格,...

  • Python3

    关于学习Python编码的一点总结 我认为关于编码这个问题廖雪峰官网上的Python教程写的很好,我从中看了几次,...

  • Python编码问题详解

    继上一篇文章字符集和编码详解总结了常见字符编码后,这篇文章会对python中常见的编码问题进行分析和总结。由于py...

  • Python2 中文编码

    使用python3的理由之中文编码,python2的编码实在是有点难受,经常出现奇怪的bug,总结一下方法: 文件...

  • python编码

    python编码 python编码简介 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,...

  • GB2312/GBK/Big5

    python中爬取网页是总是遇到中文编码问题总结如下; 1.如何判断一段文字(网页)的编码格式2.中文编码的种类和...

  • Python 编码问题总结

    Python 推荐文档 ,https://www.cjavapy.com/article/2585/[https:...

  • Python——文件编码

    编码的演变 Python编码 python2 Python指定编码 在文件头部增加 -*-coding:utf8-...

  • 转自 segmentfault<python编码的意义&g

    原文见python编码的意义,感谢jiminhuang大神 编码,还是编码 python2的直钩——编码异常 当你...

  • Python2.x的中文显示方法

    Python的默认编码 Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,Python...

网友评论

      本文标题:python编码总结

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