在 Python 中,冒号 :
是一个多用途的符号,广泛用于定义代码块、数据结构、类型注解等场景。
1. 定义代码块(缩进开始)
冒号用于标识代码块的开始,后续代码必须缩进。
# 条件语句
if x > 0:
print("正数")
# 循环
for i in range(5):
print(i)
# 函数定义
def greet(name: str) -> None:
print(f"Hello, {name}")
# 类定义
class MyClass:
def __init__(self):
pass
# 上下文管理器
with open("file.txt") as f:
content = f.read()
# 异常处理
try:
risky_operation()
except ValueError:
handle_error()
2. 字典键值对分隔符
在字典中,冒号分隔键(Key)和值(Value)。
person = {"name": "Alice", "age": 30}
3. 切片操作(Slice)
在列表、字符串等序列类型中,冒号用于切片语法 [start:end:step]
。
text = "Python"
print(text[1:4]) # 输出:yth(索引1到3)
print(text[::2]) # 输出:Pto(步长2)
4. 类型注解(Type Hints)
参数类型注解
def add(a: int, b: int) -> int:
return a + b
变量类型注解
count: int = 0
names: list[str] = ["Alice", "Bob"]
5. Lambda 表达式
分隔 Lambda 函数的参数和表达式。
square = lambda x: x ** 2
print(square(3)) # 输出:9
6. 格式化字符串(f-string)
在 f-string 中,冒号分隔值和格式规范。
price = 99.99
print(f"价格:{price:.2f}") # 输出:价格:99.99
7. 海象运算符(Walrus Operator)
Python 3.8+ 引入的 :=
运算符,在表达式中赋值变量。
if (n := len([1,2,3])) > 2:
print(f"长度是{n}") # 输出:长度是3
8. 推导式(Comprehensions)
字典推导式
squares = {x: x**2 for x in range(5)}
# 输出:{0:0, 1:1, 2:4, 3:9, 4:16}
集合推导式
unique_chars = {c for c in "hello"}
# 输出:{'h', 'e', 'l', 'o'}
9. 函数注解(Function Annotations)
更复杂的类型注解(需导入 typing
模块)。
from typing import List, Union
def process(items: List[Union[int, str]]) -> None:
pass
10. 类型别名(Type Aliases)
定义类型别名时,冒号用于注解。
from typing import List
Vector = List[float] # 类型别名
def normalize(v: Vector) -> Vector:
return [x / sum(v) for x in v]
11. 匹配语句(Match-Case,Python 3.10+)
在模式匹配中,冒号分隔模式和代码块。
status = 404
match status:
case 200:
print("成功")
case 404:
print("未找到")
case _:
print("未知状态")
总结:冒号的核心作用
场景 | 示例 | 作用 |
---|---|---|
代码块定义 | if x > 0: | 标识缩进代码块的开始 |
字典键值对 | {"key": value} | 分隔键和值 |
切片操作 | text[1:5:2] | 定义切片范围 |
类型注解 | def f(a: int) -> int: | 指定参数或返回值的类型 |
Lambda 表达式 | lambda x: x+1 | 分隔参数和表达式 |
格式化字符串 | f"{x:.2f}" | 分隔值和格式规范 |
海象运算符 | if (n := len(a)) > 0: | 在表达式中赋值变量 |
推导式 | {x: x**2 for x in ...} | 构建字典或集合 |
匹配语句(match) | case 200: | 分隔模式和对应代码块 |
注意事项
- 缩进规则:冒号后的代码块必须统一缩进(通常 4 空格)。
- 动态类型:类型注解不强制检查,需配合工具(如
mypy
)使用。 - 版本兼容性:海象运算符(
:=
)和匹配语句(match-case
)需 Python 3.8+ 和 3.10+。
合理使用冒号能让代码更清晰、易维护,是 Python 简洁设计哲学的体现!