大家好,很高兴又和大家见面啦!!!
在上一篇内容中我们介绍了Python中运算符与注释的相关内容。下面我们先简单的回顾一下相关内容:
'+'、'-'、'*'、'/'、'%'、'**'、'//'
'>'、'>='、'=='、'<='、'<'、'!='
'='、'+='、'-='、'*='、'/='、'%='、'**='、'//='、':='
'&'、'|'、'^'、'~'、'<<'、'>>'
'and'、'or'、'not'
'in'、'not in'
'is'、'is not'
通过前面内容的介绍,我们已经对Python中的基础知识有了一个大致的了解,从今天的内容开始,我们将会开始进入Python中的语法学习。
Python中的基础语法主要有条件语句、循环语句、函数等内容,接下来我们会通过三个篇章分别介绍Python中的这三种基础语法。
在今天的内容中,我们将会介绍第一种基础语法——条件语句。下面我们就直接开始今天的内容吧!
在C语言中,由一个分号';'
隔开的,就是一条语句。
但是在Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 '\'
来实现多行语句,如下所示:
# 语句
a = 10 # 这是一条语句
a = 123456789 + \
234567891 + \
345678912
# 上述内容为一条多行语句
需要注意的是多行语句实际上也是一条语句。
语句可分为以下五类:
(1)表达式语句;(2)函数调用语句;(3)控制语句;(4)复合语句;(5)空语句;
条件语句属于控制语句的一种。
用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成。
C语言中有九种控制语句,而Python中只有6种控制语句。
控制语句可以分为三大类——条件控制语句、循环执行语句、转向语句:
if
语句、Switch
语句(开关语句)if
语句do while
语句、while
语句、for
语句while
语句、for
语句break
语句、goto
语句、continue
语句、return
语句break
语句、continue
语句、return
语句在计算机语言中,选择结构的体现就是选择语句,选择语句也叫做条件语句,又叫做分支语句,是通过一条或多条语句的执行结果(True
或者 False
)来决定执行的代码块,如下所示:
上面所示的流程图中展现的是有两条分支的条件语句,当然在很多情况下条件语句不止两条分支,会存在三条及以上的分支。
在C语言中我们通过if……else
语句以及Switch
语句可以很好的通过计算机语言来描述这些分支,Python为了保证解决问题的方法只有一个,所以保留了if……else
语句,舍弃了Switch
语句,那么在Python中的if……else
语句与C/C++中的会有什么区别呢?下面我们就一起来看看Python中的if语句。
在C/C++中if语句有三种语句形式:
if……
语句if……else
语句if……else if……else
语句在C/C++的if语句中主要涉及两个关键字——if与else,因此我们在定义常量、变量以及标识符时其常量名、变量名以及标识符名是不能与这两个关键字重名的。
那同样的语句在Python中又会涉及到哪些关键字呢?
在前面我们介绍关键字时我们有说过通过关键字import
引入keyword
模版,再通过kwlist
方法就能将Python中的关键字给打印出来,如下所示:
import keyword
print(keyword.kwlist)
# [
# 'False', 'True'——布尔值关键字
# 'None'——特殊常量关键字
# 'and', 'or', 'not'——逻辑运算符关键字
# 'in'——成员运算符关键字
# 'is'——身份运算符关键字
# 'import'——模版导入关键字
# 'if', 'elif', 'else'——分支语句关键字
# 'while', 'for'——循环语句关键字
# 'break', 'continue', 'return'——转向语句关键字
# 'def'——函数关键字
# 其它关键字
# 'as', 'assert', 'async', 'await', 'class',
# 'del', 'except', 'finally', 'from', 'global',
# 'lambda', 'nonlocal', 'pass', 'raise', 'try', 'with', 'yield'
# ]
这里我给大家将我们目前已经见过的关键字都给标注了出来,可以看到在不知不觉中我们已经接触了一大部分的Python中的关键字了。
当然现在不是我们应该感慨的时候,我们应该将注意力放在分支语句关键字上,在分支语句关键字中相比于C/C++而言,多了一个关键字——elif
。
大家可以大胆推测一下这个关键字时干嘛用的。没错它就是C/C++中的else if
的一个组合关键字,它是用于多分支语句中进行条件判断的关键字。
因此Python的if语句中的三种语句形式为:
if
语句if……else
语句if……elif……else
语句相比于C/C++而言多分支语句看起来更加的简洁一点,接下来我们就来好好认识一下这三种语句形式;
在单分支语句中,不管是C/C++还是Python,都是由关键字if来进行语句引导。下面我们来看一下这两种语言的语句格式:
我们先来看一下C/C++中的单分支语句格式。
if (1) {
;
;
}
在C/C++中,单分支语句由3部分组成:
if
这里时会停下来优先运行引导词后的判断语句的内容()
中,后面紧跟着语句块。程序会根据判断语句的值来选择是否执行语句块中的内容: {}
内。在C/C++中,当语句块中只有一条语句时,可以省略大括号{}
在上面展示的格式中,1代表的就是判断语句,在计算机语言中只有0才代表假,非零为真,只有当判断语句为真时才能执行语句块中的内容;在语句块中的分号;
表示的是语句块中所执行的一条语句,语句块中可以存在一条或多条语句,也可以是如上所示的空语句。
下面我们来看一下Python中的单分支语句格式:
if True:
pass
在这个例子中,True
就是语句的判断语句,前面有一个空格' '
与引导词if
进行分隔,后面需要接一个冒号':'
表示判断语句的结束,第二行中的pass
是Python中的关键字,意思是空语句,这里通过pass
代表的是if
语句的语句块中需要执行的内容,前面带有一次缩进;
在C/C++中,会通过圆括号()
将判断语句的全部内容给括起来,会通过大括号{}
将语句块的全部内容给括起来;
在Python中,判断语句不再使用圆括号()
,而是将圆括号()
改为了空格' '
与冒号':'
:
' '
将引导词与判断语句给隔开':'
来结束判断语句语句块的执行条件不变,仍然是值为真就执行语句块中的内容,值为假则绕过分支语句执行后续内容;
语句块则是由缩进来表示,引导词与语句块的缩进级别至少相差1。
通过缩进来表示语句块,对我们来说还是比较陌生的,所谓的缩进实际上就是代码开头的空格,正常情况下我们将四个空格也就是一个Tab称为一级缩进。下面我们通过一个例子来进一步理解Python中的缩进,如下所示:
# 缩进
if True: # 无缩进
if True: # 一级缩进
pass # 二级缩进
pass # 一级缩进
pass # 无缩进
在前面的介绍中我们有提到过,在Python中一行就代表一条语句,而对于条件语句、循环语句等这种特殊的语句格式,一条语句则是由引导词、判断语句与语句块组成。
在语句块中可以存在多条语句,在C/C++中,我们通过大括号'{}'
来决定语句块的开始与结束,因此不需要担心语句内容不在语句块中;
但是在Python中舍弃了大括号在特殊语句中的这种用法,而是通过缩进来控制。以引导词这一行的缩进级别为起始点,下方语句中第一个同级别缩进语句为终点,这两行中间的内容就为语句块中的内容。如上例中:
if
引导词的缩进级别为0,也就是无缩进,最后一个空语句的缩进级别也为0,因此这两行中间的内容全部都为语句块中的内容;if
语句中,引导词所在的行对应的缩进级别为一级,第二个空语句的级别也为一级,因此这两行中间的内容全部都为语句块中的内容。不难发现,缩进级别为0的if语句的语句块中的内容的缩进级别至少是1级,而缩进级别为1级的if语句的语句块中的内容的缩进级别至少是2级。
通过这个例子大家应该就能理解什么是缩进,以及如何通过缩进来控制语句块了。下面我们再来说一下缩进的一些注意事项:
在这个例子中我们就通过两个空格来表示一级缩进,通过两个Tab表示第二次缩进,可以看到并不影响程序的运行;
此时我们将51行的空语句的缩进改为了4个空格也就是一个Tab,程序在运行时就出现了错误——IndentationError
缩进错误。
因此当我们在写代码的过程中,建议使用Tab来表示缩进,这样可以避免很多不必要的麻烦。
如果将代码的运行看做一条路的话,那么分支语句就是岔路口,单分支语句就是一条岔路口,双分支语句就是两条岔路口,多分支语句就是多条岔路口。
C/C++中的if、else if、else
与Python中的if、elif、else
这些引导词就是这些岔路口的路标,我们根据这个路标可以找到路口所设的关卡,这些关卡就好比一道密码门,每一道密码门中都会有相应的开门密码,这时程序就会面临三种情况:
希望大家通过这个比喻能够更好的理解分支语句及其运行的过程。
有了对单分支语句的理解后,下面我们再来快速的认识一下Python中的双分支语句与多分支语句。
if……else……
语句结构双分支语句也就是在单分支语句的基础上多了一个分支语句,正常是通过if……else……
的语句结构来实现,语句格式如下所示:
if True:
pass
else:
pass
和C/C++一样,在else
分支中,else
引导词后是不需要跟判断语句的。下面我们来该语句的一个实例运用:
在这这个例子中,我们通过分支语句来判断输入的值与10之间的大小关系,可以看到,当其中一个分支语句块的内容执行后,另一个分支的语句块内容是不会执行的,这就是双分支语句的使用——用来解决只有两种情况的问题。
if……elif……
语句结构在双分支语句中,如果我们想将两种分支的判断内容表示出来,我们则可以通过if……elif……
的语句结构来实现:
if True:
pass
elif False:
pass
这种语句结构可以用于当我们需要对某种特定条件指向特定操作的情况,如下所示:
在这个例子中,我们只需要处理值为0和值在1~10这两种情况,这时我们就可以通过该结构来实现这两种分支的处理,不过需要说明的是,该语句虽然形式上是双分支语句,但实际上是属于多分支语句的内容。
多分支语句指的是if……elif……else……的语句结构,如下所示:
if 1 < 1:
pass
elif 1 == 1:
pass
else:
pass
多分支语句一般用于至少有3种情况的问题,在C语言的多分支语句中,else语句部分可以有else if语句来替代,也就是说多分支语句还可以写成:
if (1) {
;
;
}
else if (2) {
;
;
}
else if (3) {
;
;
}
这里的1、 2、 3分别指的是不同的判断语句,也就是执行该分支所对应的不同情况,每一个分支代码块中的空语句指的是相应代码块中可以执行的语句内容。
同理,在Python中,同样可以通过elif
来替代else
,如下所示:
if 1 < 1:
pass
elif 1 == 1:
pass
elif 1 > 1:
pass
这种写法就是像三种情况的判断条件都给明确的展示了出来,并不会对结果的运行有任何的影响,并且在多分支语句中如果不需要执行else
语句块中的内容,则可以省略else
语句,如下所示:
在这个例子中,我们只需要对输入的值为1、 2、 3这三种情况执行特殊的代码,对于其他输入的值,我们并不需要执行任何代码,此时,我们就可以通过省略else
。
相信有朋友已经发现了当我们在双分支语句中省略else
时,该语句就变成了单分支语句,对三分支语句省略else
时,该语句就变成了双分支语句,因此我们可以认为:
if……elif……
双分支语句为特殊的三分支语句Python中的分支语句除了形式上与C/C++的分支语句有些差异外,其使用方法是不存在任何差异的,因此,Python中的分支语句同样有以下的使用方式:
match…case
语句Python 3.10 增加了 match...case
的条件判断,不需要再使用一连串的 if-else
来判断了。match...case
提供了一种更强大的模式匹配方法。模式匹配是一种在编程中处理数据结构的方式,可以使代码更简洁、易读。
这里的match…case
语句实际上就是C/C++中的Switch…case
语句,其语法格式如下所示:
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
在match…case语句中的参数内容如下所示:
下面我们直接通过一个例子来理解match语句的用法:
可以看到,相比于Switch语句,match语句的使用会更加的方便。如果将Switch语句比作一条路,那么其case就是进入这条路的不同路口,而break语句则是将不同入口给隔离出来的,如果不使用break,程序则会从对应分支进去后,一路执行其他分支的内容,如下所示:
但是在match
语句中,则不需要借助break
,每一个case
都是一个独立的分支,并且case
后面所跟的内容也不仅是整型常量表达式,还可以是变量、函数和通用符等内容。
match
与case
并不是Python中的关键字,因此我们在不使用该语句时可以定义与match
和case
同名的变量,有关match……case
的更多内容,大家可以阅读原文【Python match...case 语句】这里我就不再继续展开。
今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《Python中的循环语句》,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!