为了让逐渐增长的代码具有统一的、易读的、可拓展的编程风格,学习了google的开源风格,特别着重记录了Python相关的命名规范,以便在今后的编程中统一命名风格、方便后期维护。
Python中的命名
python中的命名包括了变量、函数、方法、类、工具包和模块等实体,google给出了一系列命名规则建议,以统一代码风格。
Caution
尽量避免单字符的命名,但是可以在计数器和迭代器中使用for i in range(xx)/异常处理中使用 except Error as e:
避免使用横杆-,尽量使用下划线
避免使用双下划线开头的名称,像__name__这样的是python自己的保留关键字
下划线开头:
单下划线_
开头意味着受保护的内部变量/函数,不会被import
导出
双下划线__
开头意味着类的私有变量或方法
内部意味着模块内,类内私有/保护变量/方法;
类命名:利用驼峰命名法 MyClass
模块名:利用小写下划线法:my_modules.py
在测试时可能会有不同的书写方法,例如test<MethodUnderTest>_<state>
,或者testPop_EmptyStack
Guido推荐的命名法:
实体 | 公有风格 | 内部 |
---|---|---|
模块 | my_module_one 小写下划线 | _my_module_one |
包 | my_package_one | |
类 | MyClass 驼峰法 | _MyClass |
函数 | my_function_one() | |
方法名 | class_metdod_one() | 保护:_class_metdod_one() 私有:__class_metdod_one() |
全局变量 | my_global_variable | _my_global_variable |
局部变量 | my_local_variable | |
实例变量 | my_instance_varible | 保护:_my_instance_varible 私有:__my_instance_varible |
全局常量 | MY_GLOBAL_CONSTANT | _MY_GLOBAL_CONSTANT |
异常 | MyExpection |
导入
每行只导入一个变量或者一个模块,避免一行导入多个模块:
import os
import sys
import numpy as np
在开头导入!!!
- 标准导入:
import os
- 第三方包导入:
import tensorflow as tf
- 子工具包导入:
from otherproject.ai import mind
不同导入的方法写在一组内,类似谷歌给出的例子:
import collections
import queue
import sys
#不同部分间使用空行隔开,上面是标准导入、下面是导入第三方工具部分
from absl import app
from absl import flags
import bs4
import cryptography
import tensorflow as tf
# 下面是导入子工具包的部分
from book.genres import scifi
from myproject.backend.hgwells import time_machine
from myproject.backend.state_machine import main_loop
from otherproject.ai import body
from otherproject.ai import mind
from otherproject.ai import soul
# Older style code may have these imports down here instead:
#from myproject.backend.hgwells import time_machine
#from myproject.backend.state_machine import main_loop
注释
短期注释TODO
,需要注意三点
- 1.
#TODO
开头 - 2.在后面紧跟括号,注明名字和你的联系方式
- 3.写清楚这个todo要解决什么问题,在什么条件下解决(时间/其他工作完成条件)
#TODO(hitrjj tom@tom.com): Test this module and add a function, when I have space time
#TODO(tom): Add data io modul untils I receive the data from boss...
#TODO 中不要写fxxk :D
At last:规范命名、做好注释、利人利己
ref:
http://google.github.io/styleguide/pyguide.html
https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
https://www.python-course.eu/python3_exception_handling.php