Skip to main content

3.循环语句

if 语句与三元操作

在 Python 中,else if 被缩写为单个关键词 elif.

if 1.0 > 1:
a = 1
elif 1.0 < 1:
a = 2
else:
a = 3

a
3

值得一提的是,Python 中的 if 语句支持链式比较,形如 a < x < b, a < x >= b 等:

a = 0
if 1 < 2 > 1.5:
a = 1
a
1

三元操作实质是高度简化的 if 环境,形如 X = a if flag else b

a = 1 if 2 < 1 else 2
a
2

for 语句

Python 的循环语句中,像其他语言一样,有 break(跳出循环体) 与 continue(循环步进) 关键词可以使用。

for 语句借助关键词 in 使用:(函数 range(N, M=0, s=1) 是一个生成等差数列的函数,位于左闭右开区间 [M,N)上且公差为 s)。

for i in range(3):
print(i)
0
1
2

注意到字典的 d.items(), d.keys(), d.values() 命令也常常用于 for 语句:

d = {"a": 1, "b": 2, "c": 3}
for k, v in d.items():
print(k, v)
b 2
c 3
a 1

以上等价于:

for k in d.keys():
print(k, d[k])
b 2
c 3
a 1

Python 中的 for 语句可选 else 语法块,表示 for 语句正常结束后执行的内容(中途 break 不属于正常结束)。这对于处理一些 break 操作很有帮助。例如:

a = 0
flag = 0
for i in range(5):
if i > 2:
flag = 1
break
if flag == 1:
a = 1
a
1

这在 Python 中显得太复杂了,直接使用 for…else…即可:

a = 1
for i in range(5):
if i > 1:
break
else:
a = 0
a
1

while 语句

while 语句的 else 语法块,指明了退出 while 循环后立刻执行的内容;它不是必需的。

如果你想要将 while 语句内部的参数传出(比如下例的计数器终值),这是一个不错的方案。

count = 1
while count < 5:
a = count
count *= 2
else:
b = count

print(a, b)
4 8

列表解析

列表解析是一种创建列表的高度缩写方式:

lst = [x ** 2 for x in range(4)]
lst
[0, 1, 4, 9]

也可以配合 if 语句:

lst = [x ** 2 for x in range(4) if x > 0]
lst
[1, 4, 9]

类似的,也有字典解析,以及下文会介绍的生成器,也有生成器解析(把外围的括号换成圆括号即可):

{n: n ** 2 for n in range(3)}
{0: 0, 1: 1, 2: 4}