编码规范:PEP8编码规范即Python增强建议书 第8版本
换行
行长限制:不超过80字符
特殊情况不能换行:导入模块语句及注释中的URL
换行方式:
1.条件表达式
Python会将圆括号,中括号和花括号中的行隐式的连接起来。用英文半角小括号“()”括起来,在逻辑运算符前面换行。
# 原代码
if (10< a < 100 and 20 < b < 100 and 30 < c < 100) or a > 100 or a <= 300
# 修改
if((10 < a < 100
and 20 < b < 100
and 30 < c < 100)
or a > 100
or a <= 300)
2.字符串
字符串超过80字符,Python会将圆括号,中括号和花括号中的行隐式的连接起来。用英文半角小括号“()”括起来换行,不要使用反斜杠连接行,反斜杠是转义字符。
# 原代码
string = "In the life once had all splendid, originally after all, all need to use the loneliness to repay."
# 修改
string = ("In the life once had all splendid, originally after all, "
"all need to use the loneliness to repay.")
# 生命中曾经有过的所有灿烂,原来终究,都需要用寂寞来偿还。——《百年孤独》
3.函数参数
在逗号后面折行。
# 原代码
def test(clsss, grade, name, age, gender, city, province, country=Jiang):
pass
# 修改
def test(clsss, grade, name, age, gender, city, province,
country=JIANGXI):
pass
4.三目运算符
三目运算符又称三元运算符,可以将简单的if条件语句改写成1行代码,但是,如果三目运算符代码超过80个字符,则仍需使用if语句。
x = int(input("输入第一个数字:"))
y = int(input("输入第二个数字:"))
#一般的写法
if (x == y):
print("两数相同!")
elif(x > y):
print("较大的数为:",x)
else:
print("较大的数为:",y)
# 三目运算符写法
print(x if(x>y) else y)
5.不要在行尾添加分号,也不要用分号将两条命令放在同一行。
# 错误
print("The past was a lie ");print(" that memory has no return")
# 正确
print("The past was a lie ")
print(" that memory has no return")
缩进
美观有层次,区分代码块
默认4个空格为一个缩进量,不用tab键以及tab键和空格键混合缩进缩进,仅单纯使用使用空格缩进
#缩进
if (x == y):
print("两数相同!")
elif(x > y):
print("较大的数为:",x)
else:
print("较大的数为:",y)
空行
代码美观,利于阅读
1.import
import语句只导入一个模块尽量避免一次导入多个 模块。
import 上下各加1个空行。
若连续导入模块,则在第一条 import 前空1行,最后一条 import 后空1行。
# 错误
import os, os
# 正确
import os
import sys
2.函数
函数下面加2个空行。
3.方法
类的每个方法下面加1个空行。
4.流程控制语句
流程控制语句上下各加1个空行。
5.变量定义
变量定义之间建议加1个空行。若变量之间有关系,则其间不加空行。
空格
1.二元运算符
二元运算符两边加1个空格。包括:赋值(=),比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not)和布尔或逻辑运算符(and, or, not)。例如:a + 34 >= (b + 34) * 3
bmi = 20
if bmi >= 18 and (
bmi <= 24):
print("正常")
2.逗号
逗号后面必须加1个空格。
def test(clsss, grade, name, age, gender, city, province,
country=JIANGXI):
pass
3.括号
前括号“(”和后括号“)”前面不加空格。
4.函数
函数参数赋值的等号两边不加空格。
注释
注释是编程语言的一个重要组成部分,用于在源代码中解释代码的作用从而增强程序的可读性和可维护性,当然也可以将源代码中不需要参与运行的代码段通过注释来去掉,这一点在调试程序的时候经常用到。注释在随源代码进入预处理器或编译时会被移除,不会在目标代码中保留也不会影响程序的执行结果。
1.结尾注释
行尾注释,空2格后#号再空1格注释
2.单行注释
#号顶头,空1格后注释
3.多行注释
三个引号开头,三个引号结尾
结尾注释
print("hello world") # 输出hello world
单行注释
print("hello world")
# 输出hello world
多行注释
""""
import turtle
turtle.pensize(4)
turtle.pencolor('blue')
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.mainloop()
"""
命名规范
变量命名需要遵循以下这些必须遵守硬性规则和强烈建议遵守的非硬性规则。
⒈硬性规则
变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,特殊字符和数字不能开头。
# 错误示范
1a = 8, a$ = 8, $a = 8
严格区分大小写,大写的a和小写的A是两个不同的变量,通常以英文小写命名变量,以英文大写命名常量。
# a和A是两个变量
a=1
A=1
不要跟关键词/保留字(有特殊含义的单词)和系统保留字(如函数、模块、变量和类等的名字)冲突。
# 查询关键词
import keyword
print(keyword.kwlist)
# 得出结果
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
# 区分字母大小写
if = "qwertyuiop"
print(if)
# 错误 SyntaxError: invalid syntax
⒉PEP 8要求
(1)模块名短小且尽量用小写字母拼写,多个单词用下划线分割多个字母。
bmi_student = 20
if bmi_student >= 18 and (
bmi_student <= 24):
print("正常")
(2)包名短小尽量使用小写字母。
com.mr.book
com.mr
(3)类名使用Pascal风格,单词首字母大写;
单下划线开头的类名为内部使用类,不能被导入。
(4)模块内部的类由"_"+Pascal风格的类名组成。
(5)私有的实例属性用两个下划线开头。
(6)常量命名全部采用大写字母,可以使用下划线。
(7)保护变量:单下划线开头的模块变量或者函数是受保护的。
(8)类的私有成员:使用双下划线开头的实例变量或方法是类私有的。
(9)专用标识:以下划线开头和结尾的标识符是Python专用的标识符。
⒊命名建议
变量的命名要考虑变量的用途,尽量以存放的内容来命名变量。例如:存放土地使用的变量使用“landuse”,存放城市的变量使用“city”。
⒋其他
⑴ 函数、类的属性和方法名通常为英文小写单词,多个字母用"_"连接。
⑵ 类名通常为首字母大写的英文单词。