流程控制
1. if 语句
x = int(input("x: "))
if x < 0:
print("neg")
elif x == 0:
print("zero")
else:
print("pos")条件无括号,必须有冒号 : 与缩进块。
2. for 循环
Python 的 for 不是 C 风格,而是迭代序列:
words = ["cat", "dog", "fish"]
for w in words:
print(w)
for i in range(5): # 0 1 2 3 4
print(i)
for i in range(2, 5): # 2 3 4
print(i)
for i, w in enumerate(words):
print(i, w)不要在迭代中修改序列
会导致跳过元素,应改用 copy:
for w in words[:]:
if len(w) > 3:
words.insert(0, w)3. while 循环
n = 5
while n > 0:
print(n)
n -= 14. break、continue、else
else 在循环正常结束(未 break)时执行:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, "合数", x)
break
else:
print(n, "质数")5. pass、match
pass 是空操作占位符:
class MyException(Exception):
passmatch 语句(3.10+)
类似 C 的 switch,但支持结构化匹配:
command = "go"
match command:
case "go":
print("go")
case "stop":
print("stop")
case _:
print("unknown")支持解构:
point = (3, 4)
match point:
case (0, 0):
print("origin")
case (x, 0):
print(f"x={x}")
case (0, y):
print(f"y={y}")
case (x, y):
print(f"x={x}, y={y}")6. 函数定义
def fib(n):
"""返回斐波那契数列前 n 项"""
a, b = 0, 1
result = []
for _ in range(n):
result.append(a)
a, b = b, a + b
return result
fib(10) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]7. 默认参数
def ask_ok(prompt, retries=3, reminder="再试一次"):
while True:
ok = input(prompt)
if ok in ("y", "yes"):
return True
if ok in ("n", "no"):
return False
retries -= 1
if retries < 0:
raise ValueError("invalid")
print(reminder)陷阱:默认值只绑定一次,可变默认值(如
[]、{})会被共享。
def f(a, L=[]):
L.append(a)
return L
f(1) # [1]
f(2) # [1, 2] ← 不是 [2]正确写法:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L8. 关键字参数与 *args / **kwargs
def f(pos, /, normal, *, kw):
print(pos, normal, kw)
f(1, 2, kw=3) # 1 2 3
# f(1, normal=2, kw=3)
def var(*args, **kwargs):
print(args, kwargs)
var(1, 2, a=3) # (1, 2) {'a': 3}/前为仅位置参数*后为仅关键字参数
9. 解包参数
args = [3, 6]
range(*args) # 解包列表
d = {"n": 5}
fib(**d) # 解包字典为关键字10. lambda
匿名函数:
pairs = [(1, "one"), (3, "three"), (2, "two")]
pairs.sort(key=lambda p: p[0])11. 文档字符串
def my_function():
"""Do nothing.
More description here.
"""
pass
print(my_function.__doc__)小结
Python 的流程控制简洁优雅,下一章深入函数特性。