if 语句

>>> if x < 0:
...     print('Negative')
... elif x == 0:
...     print('Zero')
... else:
...     print('Positive')
1
2
3
4
5
6

其中,elif 就是 else if 的含义。

for 语句

不像其他语言,Python 中的 for 循环只能针对具备迭代能力(iterable)的类型(比如列表、字符串等)进行循环。

>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words:
...     print(w, len(w))
...
cat 3
window 6
defenestrate 12
1
2
3
4
5
6
7

对于字典类型,我们可以通过 ittems() 直接访问其键值对。

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave
1
2
3
4
5
6

如果要在循环中使用一个序列open in new window(列表、字符串等)中的位置索引,可以使用 enumerate()

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe
1
2
3
4
5
6

可以通过 zip() 同时循环两个序列,最短的序列结束时循环终止。

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.
1
2
3
4
5
6
7
8

while 语句

只要 while 语句中的表达式为 True,循环就会一直持续下去。

>>> x = 3
>>> while x > 1:
...     print(x)
...     x = x - 1
...
3
2
1
2
3
4
5
6
7

breakcontinue 和循环中的 else 语句

与其他语言(如 C 语言)相同,break 语句用于跳出当前循环,continue 语句用于进入下一次循环逻辑。

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, '等于', x, '*', n//x)
...             break
...     else:
...         print(n, '是个素数')
...
2 是个素数
3 是个素数
4 等于 2 * 2
5 是个素数
6 等于 2 * 3
7 是个素数
8 等于 2 * 4
9 等于 3 * 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

注意,循环中的 else 分支只有在循环结束且不是 break 退出的时候才会执行。else 既可以与 for 一起使用,也可以与 while 一起使用。

>>> for num in range(2, 3):
...     if num % 2 == 0:
...         print("偶数", num)
...         continue
...     print("奇数", num)
偶数 2
奇数 3
1
2
3
4
5
6
7

pass 语句

pass 语句什么也不做,可以用来定义一个空类或者空函数。

>>> class MyEmptyClass:
...     pass
...
1
2
3
>>> def initlog(*args):
...     pass   # 后续会实现
...
1
2
3

逻辑判断和优先级

比较运算符 innot in 可以判断一个值是否在序列中。比较运算符 isis not 可以判断两个对象是否是同一个对象。所有的比较运算符优先级相同,但是都比数值运算符优先级低。

运算符可以级联,比如 a < b == c 表示 a 小于 b 同时 b 等于 c

可以使用布尔运算符 andor 组合比较,并且比较(或任何其他布尔表达式)的结果可以用 not 否定。布尔运算符的优先级比比较运算符低,在布尔运算符中,not 的优先级最好,or 的优先级最低。因此, A and not B or C(A and (not B)) or C 等同。

andor 同时也是短路求值运算符,从左到右依次求值,当满足结果时就中断求值。即如果 AC 都是 True 但是 BFalse,那么 A and B and C 的值为 False,不管 C 的值是什么。

我们可以将比较结果赋值给一个变量:

>>> string1, string2, string3 = '', 'string1', 'string2'
>>> non_null = string1 or string2 or string3
>>> non_null
'string1'
1
2
3
4

在 Python 中,我们还可以对序列进行比较。这种比较使用字典顺序:首先比较前两项,如果它们不同,则决定比较的结果;如果它们相等,则比较接下来的两个项目,依此类推,直到用完任一序列。如果要比较的两个项目本身是相同类型的序列,则递归地进行字典序比较。如果两个序列的所有项比较相等,则认为这两个序列相等。如果一个序列是另一个的初始子序列,则较短的序列是较小(较小)的序列。字符串的字典顺序使用 Unicode 代码点编号来对单个字符进行排序。

相同类型序列之间比较的一些示例:

(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4)           < (1, 2, 4)
(1, 2)                 < (1, 2, -1)
(1, 2, 3)             == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)
1
2
3
4
5
6
7

请注意,在 Python 中如果对象具有适当的比较方法,则使用 <> 比较不同类型的对象也是合法的。如果对象没有定义比较方法,则会抛出 TypeError 错误。

关注微信公众号,获取最新推送~

加微信,深入交流~