该文章持续更新中…


编码

介绍

在无特殊情况下,文件一律使用UTF-8编码,文件头加入#-*-coding:utf-8-*-标识

代码示例

1
2
3
4
#-*-coding:utf-8-*-

import xxx
...

命名

变量命名

介绍

在Python编程中对变量进行命名时,单个单词全部小写,多个单词时使用蛇形命名法

蛇形命名法

单词全部小写,每个单词使用下划线进行连接

1
2
guest_username = "user1"		# 游客用户名
guest_password = "123456" # 游客密码

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# 规范命名
username = "admin"
password = "123456"
guest_username = "user1" # 游客用户名
guest_password = "123456" # 游客密码
global_username = "admin" # 全局变量名以global开头


# 不规范命名
a = "admin"
b = "123456"
guestusername = "user1"
guestpassword = "123456"

常量命名

介绍

在Python编程中对常量(配置文件变量、不修改的变量)进行命名时,单词全部字母大写

代码示例

单词全部大写,每个单词使用下划线进行连接

1
2
3
4
PORT = 80
ADDRESS = 127.0.0.1
USER_FILE = "/xx.conf"
GLODAL_CONF_FILE = "/xx.conf" # 全局常量名以GLODAL开头

函数命名

介绍

在Python编程中对函数进行命名时,与变量命名一样,使用蛇形命名法

代码示例

单词全部小写,每个单词使用下划线进行连接

1
2
3
4
5
6
7
8
9
10
def hello():
pass

def write_log():
pass


# 私有函数使用下划线开头
def _private_func():
pass

类命名

介绍

在Python编程中对类进行命名时,使用大驼峰命名法

大驼峰命名法

每个单词以大写字母开头

1
2
3
4
5
6
7
8
9
10
11
# 每个单词以大写字母开头
class Student(object):
pass

class WriteFile(object):
pass


# 私有类使用下划线开头
class _Private_cls(object):
pass

文件命名

介绍

对Python文件命名时应该是描述性的,尽量避免缩进,不要通过删除单词中的字母来进行缩写,多单词时使用下划线分隔

命名示例

1
2
3
4
5
6
7
8
9
# 规范命名
request_url.py
get_response.py
download.py

# 不规范命名
a.py
get-resp.py
DOWNLOAD.py

缩进

代码缩进

介绍

使用4个空格来缩进代码,不提倡使用Tab键进行缩进,也不要Tab与空格混用

代码示例

在不同编辑器中对Tab键的解释是不同的,有时候一个Tab等于4个或8个空格,如果Tab键与空格混用在不同编辑器中则可能出现代码不会对齐,导致代码运行错误

1
2
3
4
5
6
7
8
9
# 规范缩进
for i in range(10):
print(i)
break

# 不规范缩进(报错)
for i in range(10):
print(i) # 一个Tab
break # 四个空格

序列缩进

介绍

])}和末位元素在不同一行时推荐使用序列元素尾部逗号

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 规范写法
users = ['jack','tom','jerry']
users = [
'jack',
'tom',
'jerry', # 后面加,
]

# 不规范写法
users = [
'jack',
'tom',
'jerry' # 后面不加,
]

注释

文档注释

介绍

文档注释一般出现在模块、函数、类的头部,文档注释以"""开头结尾。出现多行注释时首行不换行,末行必换行。文档注释不是越长越好,能一两句话写清楚最好

模块注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#-*-coding:utf-8-*-
"""文档注释演示

阿巴阿巴阿巴阿巴阿巴阿巴
阿巴阿巴阿巴阿巴阿巴阿巴

示例:
演示使用的运行环境为Windows10 & Python3.7
$ python file.py -H 127.0.0.1 -P 8080
-H 指定需要扫描的主机IP
-P 指定要扫描的端口

"""
import xxx

代码块

函数注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def Student():
"""对学生姓名的排序处理,以列表的方式返回结果"""
pass


def Student(name, age):
"""对学生信息的入库,返回执行状态

参数
--------
name: str
学生姓名
age: int
学生年龄

返回值
--------
Bool
返回True为执行成功,返回False为执行失败

"""
pass

类注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class School(object):
"""类的文档注释演示

阿巴阿巴阿巴阿巴阿巴阿巴
阿巴阿巴阿巴阿巴阿巴阿巴

公共属性:
student_name: 学生姓名
student_age: 学生年龄
"""


def __init__(self, student_name, student_age):
"""初始化School类"""
self.student_name = student_name
self.student_age = student_age


def Student(self):
"""将学生信息入库"""
pass

块注释

介绍

最需要写注释的时代码中那些技巧性的部分。对于复杂操作应当在其开始前协商若干行注释

代码示例

1
2
3
4
5
6
7
8
9
# 如果flag为Success就历遍数组并进行
# 排序处理,再对排列完成的数组进行去重处理
# 再将去重后的用户写入数据库

if flag == "Success":
for user in users:
假装在排序
假装在去重处理
假装在写入数据库

行注释

介绍

对于不是一目了然的代码,在其行尾添加上注释。为提高可读性,注释应该至少离开代码两个空格。

代码示例

1
2
3
4
5
# 规范写法
x += 1 # 边框加粗1个像素

# 不推荐写法(无意义)
x += 1 # x+1

醒目注释

介绍

在代码的关键部分或较为复杂的地方写上醒目的注释,突出重要性

代码示例

1
2
3
4
5
6
# ===================================
# 下面的代码不要动,否则程序直接瘫痪!
# 这家公司没前途,早点提桶跑路吧
# ===================================

a = 1 + 1

空行

介绍

顶级定义(函数或类)之间空两行,方法定义(类成员函数)之间空一行

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Student(object):

def __init__(self):
pass

def run(self):
pass


class Teacher(object):

def __init__(self):
pass

def run(self):
pass


def main():
pass

空格

介绍

  1. 在二元运算符两边各空一格 [=,-,+=,==,>,in,is not, and]
  2. 函数的参数列表中,,之后空一格,默认值等号两边要空格
  3. 括号内不要有空格,不要在逗号、分号、冒号前面加空格
  4. 参数列表、索引、切片的左括号前不加空格

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 规范写法
a = 1 + 1 * 1 / 1
a = [1, 2]
a = {'a': 2}
a['key'] = b['xx']

def test(name, age=10, color):
pass

# 不推荐写法
a = 1+1*1/1
a = [ 1,2 ]
a = { 'a':2 }
a ['key'] = b ['xx']

def test(name,age = 10,color):
pass

行长

介绍

每行不超过80个字符,除导入长的模块语句、注释里的URL。如果字符串过长可使用小括号连接起来

代码示例

1
2
3
4
5
6
7
# 规范写法
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong'):


# 不规范写法
if width == 0 and height == 0 and color == 'red' and emphasis == 'strong':
1
2
3
4
5
6
7
8
# 规范写法
txt = ("xxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxx"
"xxxxxxxxxxxxxxxxxxxx")


# 不规范写法
txt = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

字符串

介绍

  1. 参数都是字符串时可以使用%操作符或格式化方法格式化字符串,具体还是根据现实情况来判断使用+还是%操作符或格式化方法
  2. 在循环中需要对字符串进行叠加时可以将字符串写入到列表,在循环结束后使用join进行拼接,情况不合适时在考虑使用+=拼接
  3. 在同一文件中时要保持字符串引号的一致性,使用单引号或双引号之一用于引用字符串,并在同一文件中沿用,在字符串中就可以使用另外一种引号

代码示例

1
2
3
4
5
6
7
8
9
10
11
# 规范写法
txt = a + b
txt = '%s,%s' % (a,b)
txt = '{},{}'.format(a,b)
txt = 'name: %s;age: %d' % (a,b)
txt = 'name: {};age: {}'.format(a,b)

# 不规范写法
txt = '%s%s' % (a,b) # 可以直接使用+号拼接
txt = '{}{}'.format(a,b) # 可以直接使用+号拼接
txt = 'name: ' + a + 'age: ' + b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 规范写法
txt_list = []
data = {'a':'Hello','b':'World'}
for t in data.values():
txt_list.append(t)
txt = ''.join(txt_list)
print(txt)


# 不规范写法
txt = ''
data = {'a':'Hello','b':'World'}
for t in data.values():
txt += t
print(txt)
1
2
3
4
5
6
7
8
9
# 规范写法
a = 'HelloWorld'
b = "I'm iron man"
c = '"Good!" thought a happy Python reviewer.'

# 不规范写法
a = 'HelloWorld'
b = "Jack"
c = 'Jerry'

介绍

如果一个类不继承自其他类,就继承object类,嵌套类也一样

代码示例

1
2
3
4
5
6
7
# 规范写法
class Student(object):
pass

# 不规范写法
class Student:
pass

TODO注释

介绍

TODO主要是为了说明待做任务,任务标明任务人、联系方式、任务时间等信息

代码示例

TODO注释应当在所有开头处包含TOPO字符串,后面使用()括起你的名字、email或其他标识符,然后是一个可选的:,后面加上注释,解释要做什么

1
2
3
4
5
6
7
def get_response():
# TODO(动感超人): 获取网页内容
pass

def get_userinfo():
# TODO(xx@qq.com): 获取用户信息(2022/02/11)
pass

导入格式

介绍

  1. 导入语句放在文件头部,模块说明之后,全局变量之前
  2. 导入顺序按照最通用到最不通用的顺序分组(标准库导入、第三方库导入、应用程序指定导入),每组之间用一个空行分隔
  3. 每个导入应当独占一行

代码示例

import应当分行书写,每个导入应独占一行

1
2
3
4
5
6
7
# 规范写法
import os
import sys
from subprocess import Popen, PIPE

# 不推荐写法
import os,sys

Main

介绍

  1. 即使是一个被打算作为脚本的文件,也应该时可以导入的
  2. 并且简单的导入不应该导致这个脚本的主功能被执行,主功能应该放在main()函数中
  3. 代码在执行主程序前总是检查模块名,当模块被导入时就不会被执行

代码示例

__namne__是当前模块名,当模块被直接运行时模块名为__main__,将相关的调用或执行放在if __name__ == "__main__"当中,当该模块被导入时就不会被执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 规范写法
def add():
pass

def main(): # 主功能
pass


if __name__ == '__main__':
main()


# 不规范写法
def add():
pass

主功能xxxx



参考地址:

https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/#

https://www.runoob.com/w3cnote/google-python-styleguide.html

guide.html