前言
为什么要写这篇看起来不是什么技术活的文章?你可能会有这样的疑问
别急,先来看看几张代码图


看到这频繁出现的波浪线了吗,还有右侧栏的好几个黄条,可能是我有点强迫症...总之是越看越觉得看不下去
事实上还有比这更那啥的,全是波浪线...咳咳
相信大家应该都看到过这篇 “Python之禅”

而写这篇的目的就是希望我们的代码能够更加简洁、高效,来看一下下面的另一张代码图


看到右上角的小绿√ 了没,这意味你的代码已经符合了基本的Python代码的格式,是不是看起来舒服多了!
进入正题
下面我们从格式入手到更加pythonic的语法来让你的代码变得更加优雅
格式方面需要注意的大概有以下几点
空行
顶级定义之间空两行, 比如函数或者类定义;
方法定义, 类定义与第一个方法之间, 都应该空一行;
函数或方法中, 某些地方要是你觉得合适, 就空一行;
import
的包的最后一行与接下来的主要代码间正常需要间隔两行;
主要代码部分与 if __name__ == '__main__':
之间正常也需要间隔两行;
类中的方法之间需要间隔为一行
空格
括号内不要有空格;
Yes: spam(ham[1], {eggs: 2}, [])
No: spam( ham[ 1 ], { eggs: 2 }, [ ] )
不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾);
Yes: if x == 4:
print x, y
x, y = y, x
No: if x == 4 :
print x , y
x , y = y , x
在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not). 至于算术操作符两边的空格该如何使用, 需要你自己好好判断. 不过两侧务必要保持一致.
Yes: x == 1
No: x<1
当’=’用于指示关键字参数或默认参数值时, 不要在其两侧使用空格.
Yes: def complex(real, imag=0.0): return magic(r=real, i=imag)
No: def complex(real, imag = 0.0): return magic(r = real, i = imag)
行长度
每行不超过80个字符
例外:
- 长的导入模块语句
- 注释里的URL
不要使用反斜杠连接行.
Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号.
Yes: 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'):
如果一个文本字符串在一行放不下, 可以使用圆括号来实现隐式行连接:
x = ('This will build a very long long '
'long long long long long long string')
缩进
用4个空格来缩进代码
注释
确保对模块, 函数, 方法和行内注释使用正确的风格
文档注释应该用
"""
这里是文档注释
"""
块注释和行注释
# 块注释
# 块注释
print("这里是行注释") # 为了提高可读性, 注释应该至少离开代码2个空格.
导入格式
每个导入应该独占一行
Yes: import os
import sys
No: import os, sys
main
即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中.
在Python中, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if __name__ == '__main__'
, 这样当模块被导入时主程序就不会被执行.
def main():
...
if __name__ == '__main__':
main()
最后
格式风格部分先介绍到这里,还有比较详细的规范可以参考这里
Google开源项目风格指南 - Python风格规范
print('微信公众号搜索 "猿狮的单身日常" ,Java技术升级、虫师修炼,我们 不见不散!')
print('也可以扫下方二维码哦~')

网友评论