写点什么

新人融入团队的必备 python 技巧,python 编码规范,滚雪球学 Python 第 4 季 12 篇

发布于: 刚刚

python 是非常灵活的语言,所以不同的人编写出的代码差异化会很大,正因如此,所以需要一些基本规范,大家都去遵守,这样才能在多人协作开发中保持一致性。


本文就为大家梳理一下 python 行业里面达成基本共识的一些规范。


所有命名规范参考 Python 官方 PEP8 编码规范。

python 编码规范之命名规范

命名规范建议按照下面风格进行。


变量名:全部小写字母,多个单词可以用下划线分割;命名空间在模块或者函数内的,使用单下划线开头;私有变量使用双下划线,尽量不用输字符 lL 小写 ),Oo 大写 ),Ii 大写)这些易混淆的字符,命名时尽量体现变量的数据类型和具体意义,除循环计数、计数器、迭代器以外不要用单字符名称,例如变量 a


# 普通变量my_name = "xxx"def func():  # 函数内变量  _name = "xxxx"
# 体现数据类型weight_int = 90class MyClass: def __init__(self): # 私有变量 self.__name = "xxxx"
复制代码


模块名:全部小写字母,多个单词使用下划线分隔,例如 help_moudle。包名:全部小写字母,一般使用点 . 进行分隔,包名不建议使用下划线,可以使用公司域名作为唯一性标识,例如 com.baidu.help。类名:每个单词的首字母都大写(大驼峰命名法),例如 MyClass,与大驼峰命名法对应的还有小驼峰命名法,即第一个单词首字母小写,其余单词首字母大写。函数名和方法名:全部小写字母,参考变量命名规则即可。常量:全部大写字母,多个单词可以使用下划线。全局变量:全部大写字母;异常类名:异常类也属于类,所以遵循类名命名规则,但建议使用 Error 作为后缀。判断类变量:一般增加前缀 is,例如 is_error

排版规范

缩进:4 个空格,目前很多编辑器已经支持(或者可以设置)一个 Tab 等于 4 个空格。


空格的使用:在 python 代码编写的地方,很多都会用到空格,这里的总体原则就是避免不必要的空格。


  • ()[]{} 括号内不要空格;

  • = 赋值符前后都有一个空格,但赋值符出现在函数默认参数位置,省略左右空格,例如 my_func(name="橡皮擦")

  • 逗号 ,,冒号 :,分号 ; 前不要有空格;

  • 函数,列表,元组,字典,集合的左括号前不要有空格,例如 my_list[1]my_dict["name"]


空行的使用:


  • 顶级定义,例如函数、类的定义都空 2 行;

  • 导入模块代码块的前后空 2 行;

  • 类中的方法之间空 1 行;

  • 其余位置按照代码逻辑,如有需要自行空 1 行。


断行的规则:所谓断行,就是在 python 文件中要求多少个字符就进行折行,这条一般使用编辑器自动格式化实现。python 要求一行代码最多 79 个字符(文档字符串或者注释是 72 个字符),一般使用续行符 \,但是更多时候建议在括号里面进行断行,就不用续行符了。


模块导入规范:


  • import 部分,按照标准库,第三方库,自己编写的库依次导入;

  • 不要在一条 import 语句中,导入多个库;

注释规范

这个注释也有规范,直接学习官方的注释风格即可,例如下述代码截取:


def setprofile(func):    """Set a profile function for all threads started from the threading module.
The func will be passed to sys.setprofile() for each thread, before its run() method is called.
""" global _profile_hook _profile_hook = func
复制代码


可以看到文档注释使用三引号标记,其中第一行与第二行中间存在 1 个空行,然后折行的内容与三引号对其,最后的三引号自己在一行。查阅了很多内置的方法,都是如此,那我们学习过来即可。


如果文档注释仅有一行,保持一行注释即可,下述代码是案例展示。


    def qsize(self):        '''Return the approximate size of the queue (not reliable!).'''        with self.mutex:            return self._qsize()
def empty(self): '''Return True if the queue is empty, False otherwise (not reliable!).
This method is likely to be removed at some point. Use qsize() == 0 as a direct substitute, but be aware that either approach risks a race condition where a queue can grow before the result of empty() or qsize() can be used.
To create code that needs to wait for all queued tasks to be completed, the preferred technique is to use the join() method. ''' with self.mutex: return not self._qsize()
复制代码


剩下的注释就是块注释行注释了,比较简单,都是使用 # 注释内容 来实现。

其它补充说明

不要乱用括号,例如 if 语句中进行简单的判断,不需要括号。


x = 123if x:  # do_something
复制代码


建议写类的时候,显式的从 object 继承,例如下述代码。


class MyClass(object):  pass
复制代码


不要在循环中使用 + 或者 += 操作字符串


由于字符串是不可变的,所以上述操作符会频繁的创建临时对象,可以先将每个字符串存入列表,在后在循环结束,使用 "".join 连接。


给临时代码增加 TODO 注释,方法如下


# TODO 这里稍后补充细节def my_func():  pass
复制代码


尽量使用 is 或者 is not 替换 ==,例如 if x is not None 效率优于 if x


异常捕获中,在 except 语句中尽量使用具体的 Exception,异常代码中 try 内代码要少。


使用 startswith()endswith() 代替切片进行序列前缀或后缀的检查,例如下述代码:


if name.startswith("橡"):  pass
复制代码


更多精彩


发布于: 刚刚阅读数: 2
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
新人融入团队的必备python技巧,python 编码规范,滚雪球学Python第4季12篇