去年在做app轨迹时,因为要用轨迹数据文件(其实就是位置点经纬度的集合)在mock工具上进行回放,用Java实现过于臃肿,所以使用了python来编写,顺便分享记录复习python基础语法以及高级内置函数用法细节~~
Python 缩进规则(包含快捷键)
和其它程序设计语言(如 Java、C 语言)采用大括号“{}”分隔代码块不同,Python 采用代码缩进和冒号( : )来区分代码块之间的层次。
在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。
注意,Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现。但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)
height=float(input("输入身高:")) #输入身高
weight=float(input("输入体重:")) #输入体重
bmi=weight/(height*height) #计算BMI指数
#判断身材是否合理
if bmi<18.5:
#下面 2 行同属于 if 分支语句中包含的代码,因此属于同一作用域
print("BMI指数为:"+str(bmi)) #输出BMI指数
print("体重过轻")
if bmi>=18.5 and bmi<24.9:
print("BMI指数为:"+str(bmi)) #输出BMI指数
print("正常范围,注意保持")
if bmi>=24.9 and bmi<29.9:
print("BMI指数为:"+str(bmi)) #输出BMI指数
print("体重过重")
if bmi>=29.9:
print(BMI指数为:"+str(bmi)) #输出BMI指数
print("肥胖")
Python 对代码的缩进要求非常严格,同一个级别代码块的缩进量必须一样,否则解释器会报 SyntaxError 异常错误。例如,对上面代码做错误改动,将位于同一作用域中的 2 行代码,它们的缩进量分别设置为 4 个空格和 3 个空格,如下所示:
if bmi<18.5:
print("BMI指数为:"+str(bmi)) #输出BMI指数
print("体重过轻")
可以看到,第二行代码和第三航代码本来属于同一作用域,但我们手动修改了各自的缩进量,这会导致 SyntaxError 异常错误,如图 1 所示。
图 1 缩进不符合规范导致异常
对于 Python 缩进规则,初学者可以这样理解,Python 要求属于同一作用域中的各行代码,它们的缩进量必须一致,但具体缩进量为多少,并不做硬性规定。
一些ide 开发环境对缩进量的设置
pycharm
IDLE
不仅如此,在使用 IDLE 开发环境编写 Python 代码时,如果想通过设置多行代码的缩进量,可以使用 Ctrl+] 和 Ctrl+[ 快捷键,此快捷键可以使所选中代码快速缩进(或反缩进)。
Python编码规范(PEP 8)
在了解具体的 Python 编码规范之前,先来看看图 1 中的代码:
图 1 两段功能相同的 Python 代码
对比图 1 中的两段代码你会发现,它们所包含的代码时完全相同的,但很明显,右侧的代码编写格式看上去比左侧的代码段更加规整,阅读起来也会比较轻松、畅快,因为它遵循了最基本的 Python 代码编写规范。
Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。下面仅给大家列出 PEP 8 中初学者应严格遵守的一些编码规则:
- 每个 import 语句只导入一个模块,尽量避免一次导入多个模块,例如:
#推荐
import os
import sys
#不推荐
import os,sys
- 不要在行尾添加分号,也不要用分号将两条命令放在同一行,例如:
#不推荐
height=float(input("输入身高:")) ; weight=fioat(input("输入体重:")) ;
3.建议每行不超过 80 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来,而不推荐使用反斜杠 \ 进行连接。例如,如果一个字符串文本无法实现一行完全显示,则可以使用小括号将其分开显示,代码如下:
#推荐
s=("C语言中文网是中国领先的C语言程序设计专业网站,"
"提供C语言入门经典教程、C语言编译器、C语言函数手册等。")
#不推荐
s="C语言中文网是中国领先的C语言程序设计专业网站,\
提供C语言入门经典教程、C语言编译器、C语言函数手册等。"
注意,此编程规范适用于绝对大多数情况,但以下 2 种情况除外:
导入模块的语句过长。
注释里的 URL。
4.使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。比如说,在图 1 右侧这段代码中,if 判断语句同之前的代码多实现的功能不同,因此这里可以使用空行进行分隔。
5.通常情况下,在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。
Python编码规范的重要性
很多去 Google 参观的人,在用完洗手间后都有这样的疑惑,马桶前面的门上怎么会贴着 Python 编码规范?要知道,Google 对编码规范的要求极其严格,这也能从侧面说明编码规范的重要性。
对于编码规范的认知,很多初学者还仅停留在初级阶段,即只知道编码规范有用,比如命名时使用驼峰式的格式(如 TheFirstDemo),而至于为什么要求这样严格,就不是很清楚了。
Python 编码规范到底有多么重要,它对于业务开发来说,究竟有哪些帮助?
有哪些流程和工具,可以强制你遵循规定好的编码规范呢?
注意,在讲解过程,会引用以下 2 个编码规范来举例,分别是:
《8 号 Python 增强规范》,通常称之为 PEP8;
《Google Python 风格规范》 简称为 Google Style,这是源自 Google 内部公开发布的社区版本,其目的是为了让 Google 旗下所有 Python 开源项目的编程风格统一。
Python编码规范到底有多么重要
Python 编码规范重要性的原因用一句话来概括就是:统一的编码规范可以提高开发效率。
而影响开发效率的有 3 类对象,分别是阅读者、编程者和机器,它们的优先级是阅读者>>编程者>>机器(>>表示远远大于)。
例如,阅读如下这行程序:
result = [(x, y) for x in range(10) for y in range(5) if x * y > 10]
上面这行代码还可以改写成如下这种形式:
纯文本复制
for x in range(10):
for y in range(5):
if x * y > 10:
result.append((x, y))
对比这 2 种写法,显然后者调理更清楚,更容易理解,编写起来也更轻松。
编码规范的自动化工具
既然编码规范的终极目标是提高开发效率。所以,如果每次写代码都需要在代码规范上额外花很多时间,就达不到我们的初衷了。
首先,你需要根据自己的具体工作环境,选择或者制定适合自己公司或团队的编码规范。市面上可以参考的规范,也就是在文章开头提到的 PEP8 和 Google Style。
要知道,没有放之四海而皆准的规范,我们必须要因地制宜。例如在 Google 中,因为历史原因 C++ 不使用异常,引入异常对整个代码库带来的风险已经远大于它的益处,所以在它的 C++ 代码规范中,禁止使用异常。
一旦确定了整个团队所遵从的编码规范,就一定要强制执行,有什么好的办法呢?靠强制代码评审和强制静态或者动态 linter。具体流程是:
在代码评审工具里,添加必须的编码规范环节;
把团队确定的代码规范写进 Pylint 里,能够在每份代码提交前自动检查,不通过的代码无法提交。
整合之后,你的团队工作流程就会变成图 1 所示的这样。