前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你熟悉Python的代码规范吗?如何一键实现代码排版

你熟悉Python的代码规范吗?如何一键实现代码排版

作者头像
吾非同
发布2020-10-26 11:39:22
1.3K0
发布2020-10-26 11:39:22
举报
文章被收录于专栏:吾非同吾非同

首先,各个编程语言都有自己的代码规范,统一的代码规范,不仅能提高代码的可读性,还能提升代码的维护性,团队内部的集成也会更加顺畅,同时也能更轻易发现代码的问题。

团队编程的目标,所有人写的代码像一个人写出来的。

Python之禅

都说Python是一门优雅的语言,那就更少不了装饰和美化。Python在开发之初,已经规范了代码的整体原则,那就是Python之禅。

在交互式解释器中输入import this就会显示 Tim Peters 的 “The Zen of Python”

整体意思就是Python以优雅简洁为目标。具体翻译,大家可以参考下: 优美胜于丑陋(Python 以编写优美的代码为目标) 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似) 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现) 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁) 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套) 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题) 可读性很重要(优美的代码是可读的) 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上) 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码) 当存在多种可能,不要尝试去猜测 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法) 虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido ) 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量) 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准) 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

官网推荐的编码规范

目前比较通用的是pep8规范,大家可以根据下方的官方文档进行学习,其中的PEP8是Style Guide for Python Code,译为:Python代码样式指南。

pep8 官网规范地址

https://www.python.org/dev/peps/pep-0008/

下面是pep8规范中主要的一些要求:
每级缩进用4个空格。
代码语言:javascript
复制
# 对准左括号
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# 不对准左括号,但加多一层缩进,以和后面内容区别。
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

# 悬挂缩进必须加多一层缩进.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)
右边括号也可以另起一行。有两种格式,建议第2种。
代码语言:javascript
复制
# 右括号不回退,个人不推荐
my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )

# 右括号回退
my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
空格或Tab?

•在 list, dict, tuple, set, 参数列表的 , 后面加一个空格•在 dict 的 : 后面加一个空格•空格是首选的缩进方法。•Tab仅仅在已经使用tab缩进的代码中为了保持一致性而使用。•Python 3中不允许混合使用Tab和空格缩进。

最大行宽

•限制所有行的最大行宽为79字符。•文本长块,比如文档字符串或注释,行长度应限制为72个字符。

空行

•function 和 class 顶上两个空行•class 的 method 之间一个空行•函数内逻辑无关的段落之间空一行,不要过度使用空行•不要把多个语句写在一行,然后用 ; 隔开•if/for/while 语句中,即使执行语句只有一句,也要另起一行

导入在单独行
代码语言:javascript
复制
推荐
import osimport sysfrom subprocess import Popen, PIPE

导入位置:在文件的顶部,在模块注释和文档字符串之后,在模块全局变量和常量之前•导入顺序:标准库,相关的第三方库,本地库。各组的导入之间要有空行。•禁止使用通配符导入:通配符导入(from import *)应该避免,因为它不清楚命名空间有哪些名称存,混淆读者和许多自动化的工具。

括号里边避免空格
代码语言:javascript
复制
# 括号里边避免空格
#推荐
spam(ham[1], {eggs: 2})
# 不推荐
spam( ham[ 1 ], { eggs: 2 } )
逗号,冒号,分号之前避免空格
代码语言:javascript
复制
if x == 4: print x, y; x, y = y, x
函数调用的左括号之前不能有空格
代码语言:javascript
复制
# 推荐
spam(1)
dct['key'] = lst[index]

spam (1)
dct ['key'] = lst [index]
赋值等操作符前后不能因为对齐而添加多个空格
代码语言:javascript
复制
x = 1
y = 2
variable = 3
二元运算符两边放置一个空格
  • 涉及 =、符合操作符 ( += , -=等)、比较( == , < , > , != , <> , <= , >= , in , not in , is , is not )、布尔( and , or , not )。
  • 优先级高的运算符或操作符的前后不建议有空格。
代码语言:javascript
复制
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
关键字参数和默认值参数的前后不要加空格
代码语言:javascript
复制
def complex(real, imag=0.0):
    return magic(r=real, i=imag)
包和模块名

模块名要简短,全部用小写字母,可使用下划线以提高可读性。

包名和模块名类似,但不推荐使用下划线。

避免采用如下名字

决不要用字符'l'(小写字母el),'O'(大写字母oh),或 'I'(大写字母eye) 作为单个字符的变量名。

一些字体中,这些字符不能与数字1和0区别。用'L' 代替'l'时。

有什么工具,可以自动帮我们,快速实现简洁优雅,符合pep8规范的代码呢?

autopep8工具

autopep8是一个开源的命令行工具,它能够将Python代码自动格式化为PEP8风格,可以继承到pycharm中,从而便捷的实现代码排版。

autopep8可以直接使用pip进行安装:

pip install autopep8

PyCharm -> Preferences -> Tools -> Extends Tools -> 点击+加号

在Create Tool的设置如下:

代码语言:javascript
复制
name:随意写一个,建议写autopep8

Programs:autopep8 (前提是你已经安装了哦)

Parameters:--in-place --aggressive --aggressive $FilePath$

Working directory:$ProjectFileDir$

Output filters: $FILE_PATH$\:$LINE$\:$COLUMN$\:.*

在pycharm代码编辑界面,鼠标右键,选择autopep8就能对当前代码进行自动排版。

比如下面这段代码,左侧是原始代码,右侧代码是经过autopep8工具排版过的,怎么样,是不是优雅简洁了很多。

后台回复「编码规范」获取《Python PEP8 编码规范中文版》

国内程序员翻译,仅供学习参考

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

本文分享自 吾非同 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python之禅
  • 官网推荐的编码规范
    • 下面是pep8规范中主要的一些要求:
      • 每级缩进用4个空格。
        • 右边括号也可以另起一行。有两种格式,建议第2种。
          • 空格或Tab?
            • 最大行宽
              • 空行
                • 导入在单独行
                  • 括号里边避免空格
                    • 逗号,冒号,分号之前避免空格
                      • 函数调用的左括号之前不能有空格
                        • 赋值等操作符前后不能因为对齐而添加多个空格
                          • 二元运算符两边放置一个空格
                            • 关键字参数和默认值参数的前后不要加空格
                              • 包和模块名
                                • 避免采用如下名字
                                • 有什么工具,可以自动帮我们,快速实现简洁优雅,符合pep8规范的代码呢?
                                  • autopep8工具
                                  相关产品与服务
                                  命令行工具
                                  腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档