机器学习入门:Python语言实现
上QQ阅读APP看书,第一时间看更新

2.1 Python中的条件逻辑

如果你使用过其他的编程语言,那么一定见到过if/then/else(或if-elseif-else)条件语句。尽管不同语言的语法存在差异,但它们的基本逻辑是类似的。下面的代码展示了Python中if/elif的使用:

035-01

上述代码块演示了如何使用多重条件语句,并给出正确的结果。

break/continue/pass语句

可以使用break语句“提前跳出”循环,而continue语句本质上是直接跳到循环的开始并执行下一次循环,pass语句则表示“什么都不做”。

清单2.1的BreakContinuePass.py说明了这三个语句的用法。

清单2.1 BreakContinuePass.py

036-01

清单2.1的输出如下所示:

036-02

2.1.1 Python的保留关键字

每一种编程语言都有保留关键字,它们是一组不能作为标识符使用的单词,Python也是如此。Python的保留关键字是:andexecnotassertfinallyorbreakforpassclassfromprintcontinueglobalraisedefifreturndelimporttryelifinwhileelseiswithexceptlambdayield

如果你不小心使用了保留关键字作为变量,你不会看到“reserved word”的错误信息,而是会看到一个“invalid syntax”的错误信息。例如,假设你通过如下代码创建了一个Python脚本test1.py

036-03

当你运行上述脚本会得到如下输出:

037-01

通过快速检查Python代码可发现,你试图使用保留关键字break作为变量。

2.1.2 Python运算符的优先级

当涉及一个带数字的表达式时,你可能会记得乘法(“*”)和除法(“/”)比加法(“+”)和减法(“-”)有更高的优先级。指数运算相对于这四种算术运算符有更高的优先级。然而使用括号会更简单(也更安全)。例如,(x/y+10x/y+10更清晰,尽管这两个表达式是等价的。

作为另一个示例,下面的两个表达式是等价的,但是第二个比第一个出错的可能性更小:

037-02

总之,下面的网址包含了Python中运算符的优先级规则:

http://www.mathcs.emory.edu/~valerie/courses/fall10/155/resources/op_precedence.html

2.1.3 比较运算符和布尔运算符

Python支持丰富的比较运算符和布尔运算符,例如innot inisis notandornot。接下来将讨论这些运算符并通过示例阐述它们的用法。

1. in/not in/is/is not比较运算符

使用innot in来判断一个值是否出现在序列中。isis not运算符用来判断两个对象是否是同一个对象,这只对像列表这样的可变对象有用。所有的比较运算符具有相同的优先级,并且都低于算术运算符的优先级。比较运算也可以级联,例如a < b == c判断a是否小于b并且bc是否相等。

2. andornot布尔运算符

布尔运算符andornot相对于比较运算符来说优先级更低,其中andor是二元运算符,not是一元运算符。示例如下:

  • 只有在AB都为True的时候,A and B才为True。
  • 只要AB中的一个为True,A or B就为True。
  • 当且仅当A为False的时候,not(A)为True。

你还可以将其他比较表达式或布尔表达式的结果赋值给一个变量,例如:

038-01

上述代码块首先初始化变量string1string2string3,其中string1为空字符串。接下来通过or运算符初始化变量str4,由于第一个非空的变量是string2,所以str4的值等于string2