if
语句
>>> if x < 0:
... print('Negative')
... elif x == 0:
... print('Zero')
... else:
... print('Positive')
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
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
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
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.
2
3
4
5
6
7
8
while
语句
只要 while
语句中的表达式为 True
,循环就会一直持续下去。
>>> x = 3
>>> while x > 1:
... print(x)
... x = x - 1
...
3
2
2
3
4
5
6
7
break
、continue
和循环中的 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
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
2
3
4
5
6
7
pass
语句
pass
语句什么也不做,可以用来定义一个空类或者空函数。
>>> class MyEmptyClass:
... pass
...
2
3
>>> def initlog(*args):
... pass # 后续会实现
...
2
3
逻辑判断和优先级
比较运算符 in
和 not in
可以判断一个值是否在序列中。比较运算符 is
和 is not
可以判断两个对象是否是同一个对象。所有的比较运算符优先级相同,但是都比数值运算符优先级低。
运算符可以级联,比如 a < b == c
表示 a
小于 b
同时 b
等于 c
。
可以使用布尔运算符 and
和 or
组合比较,并且比较(或任何其他布尔表达式)的结果可以用 not
否定。布尔运算符的优先级比比较运算符低,在布尔运算符中,not
的优先级最好,or
的优先级最低。因此, A and not B or C
与 (A and (not B)) or C
等同。
and
和 or
同时也是短路求值运算符,从左到右依次求值,当满足结果时就中断求值。即如果 A
和 C
都是 True
但是 B
是 False
,那么 A and B and C
的值为 False
,不管 C
的值是什么。
我们可以将比较结果赋值给一个变量:
>>> string1, string2, string3 = '', 'string1', 'string2'
>>> non_null = string1 or string2 or string3
>>> non_null
'string1'
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)
2
3
4
5
6
7
请注意,在 Python 中如果对象具有适当的比较方法,则使用 <
或 >
比较不同类型的对象也是合法的。如果对象没有定义比较方法,则会抛出 TypeError
错误。
关注微信公众号,获取最新推送~
加微信,深入交流~