去年在做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 所示。

image.png

图 1 缩进不符合规范导致异常

对于 Python 缩进规则,初学者可以这样理解,Python 要求属于同一作用域中的各行代码,它们的缩进量必须一致,但具体缩进量为多少,并不做硬性规定。

一些ide 开发环境对缩进量的设置

pycharm

image.png

image.png

IDLE

image.png

不仅如此,在使用 IDLE 开发环境编写 Python 代码时,如果想通过设置多行代码的缩进量,可以使用 Ctrl+] 和 Ctrl+[ 快捷键,此快捷键可以使所选中代码快速缩进(或反缩进)。

Python编码规范(PEP 8)

在了解具体的 Python 编码规范之前,先来看看图 1 中的代码:

image.png

图 1 两段功能相同的 Python 代码

对比图 1 中的两段代码你会发现,它们所包含的代码时完全相同的,但很明显,右侧的代码编写格式看上去比左侧的代码段更加规整,阅读起来也会比较轻松、畅快,因为它遵循了最基本的 Python 代码编写规范。

Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。下面仅给大家列出 PEP 8 中初学者应严格遵守的一些编码规则:

  1. 每个 import 语句只导入一个模块,尽量避免一次导入多个模块,例如:

#推荐

import os

import sys

#不推荐

import os,sys

  1. 不要在行尾添加分号,也不要用分号将两条命令放在同一行,例如:

#不推荐

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 所示的这样。

image.png

昨天是历史。明天是谜团。只有今天是天赐的礼物。