2022年 11月 7日

python编程规范

文章目录

  • 前言
  • 一、Python编程规范
  • 二、具体规范
    • 1.行长度
    • 2.缩进
    • 3.空行
    • 4.空格
    • 5.注释
    • 6.命名
    • 7.main
  • 总结

前言

本人昨日无意中看到codesheep up主的一期关于你为什么要写技术博客的视频。看完之后,如梦初醒。自己从去年开始接触编程,写的代码虽已过万,但从来没有写过一篇技术博客来记录自己的成长以及掉过的无数坑。惭愧万分啊!
不管你做什么,总得留下点什么东西。从今天开始,一名学机械的研究生要开始自己的博客之旅。


一、Python编程规范

自己的第一篇博客该写什么,笔者想了很久。最终选择编程规范这一话题进行撰文,主要是因为自己作为一个非计算机科班的学生踏上了编程这条路,前期代码编写太过随意,毫无规范可言。而假如你要靠编程找工作的话,代码不规范,那是直接被“枪毙”的。特此,以自己的第一篇博客告诫自己代码编写一定要规范,同时也希望那些和我一样自学编程的小伙伴们也能赶紧重视起编程规范这一问题。

二、具体规范

1.行长度

每行不超过80个字符
以下情况除外:

长的导入模块语句
注释里的URL
不要使用反斜杠连接行
Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号。

foo_bar(self, width, height, color='black', design=None, x='foo',
             emphasis=None, highlight=0)

     if (width == 0 and height == 0 and
         color == 'red' and emphasis == 'strong'):
  • 1
  • 2
  • 3
  • 4
  • 5

2.缩进

用4个空格来缩进代码
绝对不要用tab, 也不要tab和空格混用. 对于行连接的情况, 你应该要么垂直对齐换行的元素或者使用4空格的悬挂式缩进(这时第一行不应该有参数)

3.空行

顶级定义之间空两行, 方法定义之间空一行
顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行. 函数或方法中, 某些地方要是你觉得合适, 就空一行.

4.空格

不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾).

Yes: if x == 4:
         print x, y
     x, y = y, x
No:  if x == 4 :
         print x , y
     x , y = y , x
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5.注释

不管是python还是其他语言,给代码写上注释都是极其重要的一件事。但这并不意味着每一条语句都需要写上注释,一般而言最需要写注释的是代码中那些技巧性的部分. 如果你在下次 代码审查 的时候必须解释一下, 那么你应该现在就给它写注释. 对于复杂的操作, 应该在其操作开始前写上若干行注释. 对于不是一目了然的代码, 应在其行尾添加注释.
为了提高可读性, 注释应该至少离开代码2个空格.

# BAD COMMENT: Now go through the b array and make sure whenever i occurs
# the next element is i+1
  • 1
  • 2

另一方面, 绝不要描述代码. 假设阅读代码的人比你更懂Python, 他只是不知道你的代码要做什么.
除此之外,当你写一个类或者函数时,应该给其写上文档注释。

6.命名

所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的.

用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).

用双下划线(__)开头的实例变量或方法表示类内私有.

将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.

对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰.

7.main

即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中.

在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if name == ‘main’ , 这样当模块被导入时主程序就不会被执行.

def main():
      ...

if __name__ == '__main__':
    main()
  • 1
  • 2
  • 3
  • 4
  • 5

总结

该博客大部分内容来自于菜鸟教程,python编程规范
本文选取了部分比较重要的对其进行描述。