2.1 Python中的条件逻辑
如果你使用过其他的编程语言,那么一定见到过if/then/else
(或if-elseif-else
)条件语句。尽管不同语言的语法存在差异,但它们的基本逻辑是类似的。下面的代码展示了Python中if/elif
的使用:
上述代码块演示了如何使用多重条件语句,并给出正确的结果。
break/continue/pass
语句
可以使用break
语句“提前跳出”循环,而continue
语句本质上是直接跳到循环的开始并执行下一次循环,pass
语句则表示“什么都不做”。
清单2.1的BreakContinuePass.py
说明了这三个语句的用法。
清单2.1 BreakContinuePass.py
清单2.1的输出如下所示:
2.1.1 Python的保留关键字
每一种编程语言都有保留关键字,它们是一组不能作为标识符使用的单词,Python也是如此。Python的保留关键字是:and
、exec
、not
、assert
、finally
、or
、break
、for
、pass
、class
、from
、print
、continue
、global
、raise
、def
、if
、return
、del
、import
、try
、elif
、in
、while
、else
、is
、with
、except
、lambda
、yield
。
如果你不小心使用了保留关键字作为变量,你不会看到“reserved word”的错误信息,而是会看到一个“invalid syntax”的错误信息。例如,假设你通过如下代码创建了一个Python脚本test1.py
:
当你运行上述脚本会得到如下输出:
通过快速检查Python代码可发现,你试图使用保留关键字break
作为变量。
2.1.2 Python运算符的优先级
当涉及一个带数字的表达式时,你可能会记得乘法(“*”)和除法(“/”)比加法(“+”)和减法(“-”)有更高的优先级。指数运算相对于这四种算术运算符有更高的优先级。然而使用括号会更简单(也更安全)。例如,(x/y
)+10
比x/y+10
更清晰,尽管这两个表达式是等价的。
作为另一个示例,下面的两个表达式是等价的,但是第二个比第一个出错的可能性更小:
总之,下面的网址包含了Python中运算符的优先级规则:
http://www.mathcs.emory.edu/~valerie/courses/fall10/155/resources/op_precedence.html
2.1.3 比较运算符和布尔运算符
Python支持丰富的比较运算符和布尔运算符,例如in
、not in
、is
、is not
、and
、or
和not
。接下来将讨论这些运算符并通过示例阐述它们的用法。
1. in/not in/is/is not
比较运算符
使用in
和not in
来判断一个值是否出现在序列中。is
和is not
运算符用来判断两个对象是否是同一个对象,这只对像列表这样的可变对象有用。所有的比较运算符具有相同的优先级,并且都低于算术运算符的优先级。比较运算也可以级联,例如a < b == c
判断a
是否小于b
并且b
和c
是否相等。
2. and
、or
和not
布尔运算符
布尔运算符and
、or
和not
相对于比较运算符来说优先级更低,其中and
和or
是二元运算符,not
是一元运算符。示例如下:
- 只有在
A
和B
都为True的时候,A and B
才为True。 - 只要
A
和B
中的一个为True,A or B
就为True。 - 当且仅当
A
为False的时候,not(A)
为True。
你还可以将其他比较表达式或布尔表达式的结果赋值给一个变量,例如:
上述代码块首先初始化变量string1
、string2
、string3
,其中string1
为空字符串。接下来通过or
运算符初始化变量str4
,由于第一个非空的变量是string2
,所以str4
的值等于string2
。