前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python代码规范

python代码规范

作者头像
生信修炼手册
发布2020-06-04 11:06:50
8270
发布2020-06-04 11:06:50
举报
文章被收录于专栏:生信修炼手册生信修炼手册

虽然说实现功能是编程的首要目的,但是在实际开发过程中,代码的可读性也是非常重要的。不同的人有不同的编程习惯和风格,对于一个团队而言,想要高效的协同开发,遵守一个统一的代码规范是非常重要且必要的。

举个例子,开发和维护数据分析的pipeline可以说的上是生信工程师的日常了,对于这样一个需要长期维护的项目而言,在开发阶段,遵循统一的代码规范,可以将任务拆分,分配给团队的不同人员进行开发,提高效率;在后期的维护中,也可以交由不同的人来进行维护。

这一切的基础就是统一的代码规范,对于python而言,官方的PEP8规范是使用最广泛,认可度最高的代码规范,文档链接如下

代码语言:javascript
复制
https://www.python.org/dev/peps/pep-0008/

涵盖的内容很多,本文简要介绍其中几项

1. 每行长度

每行代码最大长度不超过80个字符。对于太长的行,需要分隔成多行,推荐使用圆括号,中括号,花括号来隐式的连接多行的内容,不推荐使用反斜杠,示例如下

代码语言:javascript
复制
x = ('This will build a very long long '
     'long long long long long long string')

当然,对于无法使用圆括号的情况,仍然需要使用反斜杠,示例如下

代码语言:javascript
复制
with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

2. 多行代码的缩进与对齐

多行代码推荐用缩进的方式使其看上去,直观的属于一个整体,一种写法是直接在圆括号,中括号,花括号之后换行,换行之后缩进4个空格,示例如下

代码语言:javascript
复制
my_list = [
    1, 2, 3,
    4, 5, 6,
]

foo = long_function_name(
    var_one, var_two,
    var_three, var_four)
    
# 为了将参数和函数内部的代码进行区分,将参数又添加了4个空格的缩进
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one) 

当然,这里不是一定要4个空格,只是4个空格的写法最常见,另外一种写法在各种括号之后的第一个变量名之后换行,换行之后的变量和第一个变量名保持相同的缩进,示例如下

代码语言:javascript
复制
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

3. 二元操作符的多行连接

二元操作符,即操作符两侧都有变量的操作符,当语句太长时,,二元操作符写在行首,这样可以直观的看出对变量进行的操作,示例如下

代码语言:javascript
复制
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

4. 空格的使用

二元操作符与其操作的对象之间添加一个空格,当多个具有不同优先级的操作符出现在同一句代码中时,优先级低的两侧添加空格,示例如下

代码语言:javascript
复制
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

括号内元素与左右两侧的括号之间不需要有空格,逗号,冒号,分号的前面不需要有空格,而应该在之后添加一个空格,示例如下

代码语言:javascript
复制
spam(ham[1], {eggs: 2})

if x == 4: print x, y; x, y = y, x

多行语句,不需要用空格来人为对齐,示例如下

代码语言:javascript
复制
x = 1
y = 2
long_variable = 3

函数参数列表中的等于号两侧,不需要空格,示例如下

代码语言:javascript
复制
def complex(real, imag=0.0):
    return magic(r=real, i=imag)

5. 分号的使用

即使语句很简短,也不要采用分号将多条语句写成一行,这样不容易看出程序结构,正确的写法示例如下

代码语言:javascript
复制
if foo == 'blah':
    do_blah_thing()
do_one()
do_two()
do_three()

6. 注释

编写注释可以提高程序可读性,对于一个函数,模块,类等,推荐使用文档字符串来编写注释,示例如下

代码语言:javascript
复制
def extract_fastq(id, fq):
    """Fetches seqs from a fastq file by input id.

    Args:
        id: input seq ids.
        fq: the fastq file

    Returns:
        A list contain the extract sequences

        [
            'AT...GTAGCTGC',
            'GCTAATGTGC..GTA',
        ]
    """
    pass

7. 模块导入

模块的导入应该独占一行,导入同一个模块中的多个方法可以写成一行,示例如下

代码语言:javascript
复制
import os
import sys
from subprocess import Popen, PIPE

8. 命名

变量名应该有意义,不要使用单个字母作为变量名,为了变量名有意义,可能需要多个单词来表示,此时可以用下划线进行连接,比如hello_world。

变量名,函数,模块名称等都推荐用小写字母,常量用全部大写字母表示,比如MAX_THREADS。

在Python中,对于变量名有如下约定

  • 单下划线开头的变量表示模块或者类的私有变量
  • 双下划线开头的变量表示类内私有
  • 双下划线开头,并且双下划线结尾的变量是python的保留变量,比如__all__, 自定义的变量不要采用这样的写法

除了以上几点,PEP8规范还有很多细节,具体的请查看官方文档。

·end·

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档