Python代码规范(多院校适配版)
作者参考了昆士兰大学、墨尔本大学等海外院校基础Python课程的code style打分标准,以及Google的Python代码规范。适合新手培养良好编码习惯,也能避免课程中因不规范失分。
目录
写在前面
本文档结合多所院校和大型公司(如AWS)的实践标准制定,适合初学者避免常见失误。遵循这些规范可以帮助你:
- 提升代码可读性
- 避免常见错误
- 培养专业的编码风格
变量规范
语义规范
-
命名原则
- 不要使用无意义的变量名(如
a,b,c;a1,b1等) - 使用全小写字母,单词之间用下划线
_分隔 - 命名流程:中文含义 ➔ 翻译成最多三个英文单词 ➔ 用下划线连接
- 不要使用无意义的变量名(如
-
命名示例
# 正确的命名
student_name = "Tom"
student_age = 18
# 错误的命名
list = [1, 2, 3] # 避免使用内置类型名
str = "hello" # 避免使用内置类型名 -
特殊场景
- for循环内部可以用
i,j,k作为索引变量 - 复数变量用复数形式,如
students - 同类对象区分时使用编号,如
student1,student2 - 多次使用的数字定义为常量(全大写命名):
MAX_RETRY = 3
DEFAULT_TIMEOUT = 30
- for循环内部可以用
语法规范
- 基本规则
- 变量名只能包含字母、数字、下划线
- 不能以数字开头
- 不能是Python保留字或内置函数名
- 创建变量时必须是
变量名 = 值的形式
作用域规范
- 基本原则
- 避免使用全局变量
- 推荐使用常量替代硬编码的数字
- 常量用全大写表示
文件规范
- 基本规则
- 禁止在行末添加
; - 一行只写一个表达式
- 每行字符数不超过80个,必要时换行
- 缩进使用4个空格,禁止使用Tab
- 函数、类定义之间留一空行
- 禁止在行末添加
空格规范
-
括号使用
# 正确
sum(a, b)
# 错误
sum( a, b ) -
逗号和冒号
# 正确
print(a, b)
# 错误
print(a ,b) -
索引/切片
# 正确
items[0:10]
# 错误
items [0:10] -
二元操作符
# 正确
if a == b and b != c:
pass -
等号使用
# 创建变量时
count = 10
# 指定默认参数时
def func(a=1, b=2):
pass
注释规范
文档注释
-
使用场景
- 函数定义下方
- 类定义下方
-
标准格式
def add_numbers(a: int, b: int) -> int:
"""
Add two integers and return the result.
Parameters:
a (int): The first number.
b (int): The second number.
Returns:
int: The sum of a and b.
"""
return a + b
行间注释
-
格式要求
- 用
#开始,后跟一个空格 - 注释要么写在上一行,要么同一行(代码和注释间隔至少两个空格)
- 用
-
示例
# 初始化列表
my_list = [] # 创建一个空列表
类型提示
-
使用说明
- 仅起到标注作用,不会报错
- 写在函数参数和返回值部分
-
示例
def greet(name: str) -> str:
return "Hello " + name
异常与条件
异常规范
-
基本原则
- 禁止使用
assert,应使用raise - 捕获具体异常类型,禁止裸
except - 尽量缩小
try/except包围的代码块范围
- 禁止使用
-
示例
try:
value = int(input("Enter a number: "))
except ValueError:
print("That's not a valid number!")
条件规范
-
基本原则
- 优先使用隐式布尔判断
- 单个if语句最多包含两个条件
- if-else嵌套不要超过三层
-
示例
# 正确
if my_list: # 而不是 if len(my_list) > 0
print("List is not empty")
实战演练
找茬练习题
原代码(存在规范问题):
a= 5
if(a>0):
print ("positive")
else:
print ("non-positive")
规范化修改后:
a = 5
if a > 0:
print("positive")
else:
print("non-positive")
小结
遵循这些规范,可以帮助你在写Python代码时:
- 提升代码可读性
- 避免常见错误
- 培养专业的编码风格
- 在课程作业中获得更好的评分