Python的简洁很大程度上也由于其严格的格式缩进和语法,PEP8是python的协议,使用“四个空格”作为缩进标准,一个tab或2-6个空格也可以作为缩进方式,但是缩进必须统一。
Python注释
Python中有预留注释关键字,使用如下
使用“#”注释,单行注释,符号及其之后的内容均不会被解释,不可跨行
使用“””” ””””或“’’’ ’’’”注释,多行注释,在其中间的所有内容包含符号全部不会被解释,可以跨行
值得注意的是,python中存在注释快捷键,使用“Alt+3”可以快速批量注释,也可以使用“Alt+4”来快速取消注释
Python运算符
python中有其独特的运算符,我们可以根据如下表说明方式进行使用
Python逻辑判定
逻辑判定我们可以理解为条件选择,在生活中也处处充满了判定选择,“这次考试如果100分,爸爸就会奖励我5元钱”就是一个典型的选择性判定,只有满足了“分数”是100的时候,我才会拿到5元钱,这个判定程序上通过if来进行判定,python中的判定语句如下清单
Python循环语句
在python中有两种循环方式,分别是for循环和while循环,其语法结构为
#for循环格式,冒号不可忘记,下一行需要缩进
for 变量 in 可迭代的物件:
执行语句
#while循环格式,冒号不可忘,下一行需缩进
while 条件:
执行语句
值得注意的是我们常用break 和 continue来控制循环语句,其中的break 表示结束循环体,而continue则表示结束当此循环,循环语句还会继续下一次循环。
Python容错机制
在python执行中会遇到某条语句报错而无法继续运行,在许多运用场景上我们希望继续运行其他组件,只停止出错的部分,于是会用到try-except语句来容错
#使用try语句,当try的代码段遇到错误,会执行except代码段
try:
可能出错的代码段
except:
备用代码段 #若不需要备用代码段,可以写pass,pass不会有任何操作,用于占位
上面是最简单的容错语句,在实际使用中可能需要存log或者自动debug,需要得到是什么错误,可以在except后面跟错误类型,如下是python的错误关键字,这里的except可以写多条,每一条都是判定错误类型的语句。
在执行try语句中,如果遇到需要强制中断时可以用raise,raise后面可以跟上方的错误类型,这个错误类型可以被except抓取到。还有一个类似的assert中断方法,其语法为[assert False, '错误讯息'],用法和raise类似。
值得一提的是在except后面可以继续写入else 或 finally,这里的else表示没有错误会执行,而finally则是不管有没有错,都会进行执行。
Python的推导式
推导式是python的语法之一,运用在迭代的物件上,只需要一行代码就可以完成迭代推导,这也是python简洁的代表之一,推导式可以用在串列、字典、集合、元组上。其基本表达式为
#result表示新生成的列表,expression 表示新生成的项目,item 表示从迭代物件取出的项目,iterable表示可迭代物件
result = [expression for item in iterable]
#代码范例,如下一行代码可以输出9*9乘法表
print(["%s*%s=%s"%(i,j,i*j) for i in range(1,10,1) for j in range(i, 10,1)])
#python推导式生成列表可以嵌入if,单if放在后方,放前方则必须加else
print(["%s*%s=%s"%(i,j,i*j) for i in range(1,10,1) for j in range(i, 10,1) if i%2==0] )
print(["%s*%s=%s"%(i,j,i*j) if i%2==0 else 100 for i in range(1,10,1) for j in range(i, 10,1) ] )
# result表示新生成的字典,key表示键,value表示值,item表示从迭代物件取出的项目,iterable表示可迭代物件
result = {key: value for item in iterable}
#如下范例可以生成一个简单字典
print({i:i for i in range(1,10)})
#result表示生成的新集合,value表示生成的值,item表示表示从迭代物件取出的项目,iterable表示可迭代物件
result = {value for item in iterable}
#如下范例可以生成一个简单集合
print({i for i in range(1,10)})
#variable表示型别为 tuple 的变量,value表示生成的值,item表示表示从迭代物件取出的项目,iterable表示可迭代物件
variable = tuple(value for item in iterable)
#如下范例可以生成一个简单元组
print( tuple(i for i in range(10)))
Python类(class)
在python学习到一定程度后我们需要自己设计程序了,而python语法中提供了类(class)来容纳我们设计好的代码属性,比如我们需要设计一个名为computer_config的类,目的是返回电脑的预设配置,我们预设电脑有五个属性,分别是1个CPU,1个GPU,2个DIMM,一个HDD,一个ODD,我们构建如下代码的类就写好了一台电脑
class computer_config():
def __init__(self): # 建立预设属性的写法
self.CPU = 1 # 一个CPU
self.GPU = 1 # 一个GPU
self.DIMM = 2 # 两个内存条
self.HDD = 1 # 一个硬盘
self.ODD = 1 # 一个光驱
CPT = computer_config() # 生成一个名为GPT的物件
print(CPT.CPU)
值得注意的是,python里的任何东西(函数,变量等)都是物件,只是python将大部分物件隐藏,只显示最常使用的方法,除非有特殊使用,不然不会更改预设的物件。
Python 函数(def)
在python中还有一种容纳预设属性的方法叫做函数(def),函数的构建和类相似,我们这里建立一个computer函数,在调用的时候直接打印出computer的CPU信息。
def computer():
CPU = 1 # 一个CPU
GPU = 1 # 一个GPU
DIMM = 2 # 两个内存条
HDD = 1 # 一个硬盘
ODD = 1 # 一个光驱
print("you computer have %s*CPU"%CPU)
CPT = computer() # 生成一个名为GPT的物件
Python中的类(class)和函数(def)再总结起来有如下特点需要注意:
1. class在程式启动时就会被执行,而def则是在调用时被执行
2. class和def可以任意嵌套和进行递归调用(自己调用自己)
3. class中具备初始属性在def init()中配置(非必须),其属性可以用赋值方式新增或修
4. 若不希望预先定义的内容被修改,可在定义前加入装饰器@property来设置成只读
Python的继承
在我们写程式时因为需求或数据来源的变更,我们通常需要修改写好的class,而修改之前的class可能会使其功能更加复杂甚至出现bug,这时就可以通过继承的方式来进行处理,如下我们的son类需要继承father类的属性,其语法为class son(father)
class father(): # fatehr 类别
def __init__(self):
self.real_estate = "NO54"
class son(father): # son 类别继承了 fatehr 类别里的real_estate(房产)
def language(self): # son 类别具有 language 的方法
print('english') # 从 father 继承了房产,然后自己学会讲英语
son_def = son() # 设定 son_def 为 son()
print(son_def.real_estate) #调用继承的属性
son_def.language() #调用自己的属性
值得注意的是,如果子类的方法和父类的方法名称相同,调用子类时则会完全覆写父类的方法,如果父类具有这个函数,而子类希望继承就不要起相同的名字。若一定要有同名如自身函数def init(),则需要使用super()去继承父类def init()的所有属性,然后有相同的属性会进行单个覆写。
如果需要继承多个类,则可以全部写道继承位置,如下为语法格式
class son(father,mother)#多重继承,同时继承了father和mother的属性,同名属性以顺序覆写保留最后一次的属性,如这里表示先继承father,后继承mother,若有同名属性,则mother的属性会覆写father的属性。而继承也可以嵌套,这里的father属性也可以是继承了grandpa的属性。
Python的私有方法(双下划线)
我们有时候并不希望子类继承全部的父类属性,那么我们可以将父类的方法设置成私有,其语法为:__方法名(两个下划线+方法名),这个类就会被设定成私有,并不会被继承
Python载入模块(import)
在python中,我们可以使用开源或者自己已经写好的模块,模块的本质是写好python代码的py文件,载入模块后可以调用模块内的定义项目
Import 模块名称 #载入名为“模块名称”的库
from 模块名称 import 方法 #从名为“模块名称”的库中载入方法模块,这里如果写*表示载入方法
我们可以用as来进行重新命名
import datetime as DT #表示将datetime模块重命名为DT,调用时需要使用DT而不是datetime
我们也可以使用自己写的模块,比如我的模块文件是ric_wang.py,并且这个文件放在与如下python代码放在同一个目录下,那么我可以这样导入
Import ric_wang as ric #导入我写的库并重命名为ric
如果在其他文件夹,比如在程式里面的mymodel文件夹的test文件夹,那么我们可以这样导入
from mymodule.test import ric_wang
#如下可以添加在from后面来表示目录位置,这里的.就表示当前目录
from . import a # 同一层目录
from .. import a # 上一层目录
from ... import a # 上上层目录
后记
python的基础语法是学习python的基础,我们尽量打好基础,继续学习吧。