Python
一、lambda
语法
python
lambda 参数: 返回值
案例
python
# 两数相加
add = lambda x, y: x + y
print(add(3, 5)) # 8
# 排序时指定字段
students = [{"name": "张三", "age": 25}, {"name": "李四", "age": 20}]
sorted(students, key=lambda s: s["age"])
# 过滤
list(filter(lambda x: x > 0, [-1, 2, -3, 4]))
# 映射
list(map(lambda x: x * 2, [1, 2, 3]))
注意
- lambda 只能写单行表达式
- 多行逻辑用
def
二、列表推导式
语法
python
[表达式 for 变量 in 可迭代对象]
[表达式 for 变量 in 可迭代对象 if 条件]
案例
python
# 基础
arr = [1, 2, 3]
result = [a * 2 for a in arr]
print(result) # [2, 4, 6]
# 带条件
result = [a for a in arr if a > 1]
print(result) # [2, 3]
# 生成字典
arra = [1, 3, 4]
arrb = [{"role": 1, "age": a} for a in arra]
print(arrb)
# [{"role": 1, "age": 1}, {"role": 1, "age": 3}, {"role": 1, "age": 4}]
# 嵌套循环
result = [f"{x}{y}" for x in ["A", "B"] for y in [1, 2]]
print(result) # ["A1", "A2", "B1", "B2"]
# 相当于:
result = []
for x in ["A", "B"]:
for y in [1, 2]:
result.append(f"{x}{y}")
# 三元表达式配合
result = ["偶数" if a % 2 == 0 else "奇数" for a in range(5)]
print(result) # ["偶数", "奇数", "偶数", "奇数", "偶数"]
和 for 循环对比
python
# for 循环
result = []
for a in arr:
if a > 1:
result.append(a * 2)
# 列表推导式(等价)
result = [a * 2 for a in arr if a > 1]
三、三目表达式(三元运算符)
语法
python
# 如果条件成立取 a,否则取 b
值 = a if 条件 else b
案例
python
# 基础
age = 20
label = "成年人" if age >= 18 else "未成年人"
print(label) # 成年人
# 赋值
x = 10
y = "正数" if x > 0 else "负数或零"
# 在列表推导式中使用
nums = [1, 2, 3, 4, 5]
result = ["偶数" if n % 2 == 0 else "奇数" for n in nums]
print(result) # ["奇数", "偶数", "奇数", "偶数", "奇数"]
# 嵌套(不推荐,可读性差)
score = 85
level = "优秀" if score >= 90 else "良好" if score >= 80 else "及格" if score >= 60 else "不及格"
# 相当于
if score >= 90:
level = "优秀"
elif score >= 80:
level = "良好"
elif score >= 60:
level = "及格"
else:
level = "不及格"
其他语言对比
python
# Java / JavaScript
var result = condition ? value1 : value2;
# Python
result = value1 if condition else value2
四、双目表达式
双目的意思是需要两个操作数。Python 常用的双目运算:
算术双目
python
a + b # 加
a - b # 减
a * b # 乘
a / b # 除
a ** b # 幂运算(a 的 b 次方)
a // b # 整除
a % b # 取余
比较双目
python
a == b # 等于
a != b # 不等于
a > b # 大于
a < b # 小于
a >= b # 大于等于
a <= b # 小于等于
a is b # 是同一个对象
a in b # a 在 b 里面
逻辑双目
python
a and b # 且
a or b # 或
赋值双目
python
a += 1 # 等价 a = a + 1
a -= 1 # 等价 a = a - 1
a *= 2 # 等价 a = a * 2
a /= 2 # 等价 a = a / 2
五、方法重写
语法
python
class 父类:
def 方法名(self):
...
class 子类(父类):
def 方法名(self): # 同名方法覆盖父类
...
案例
python
class Animal:
def speak(self):
return "..."
class Dog(Animal):
def speak(self):
return "汪汪"
class Cat(Animal):
def speak(self):
return "喵喵"
print(Dog().speak()) # 汪汪
print(Cat().speak()) # 喵喵
# 调用父类方法
class Child(Animal):
def speak(self):
return super().speak() + " 再说一遍"
六、enumerate
语法
python
enumerate(可迭代对象, start=0)
案例
python
# 基础
fruits = ["苹果", "香蕉", "西瓜"]
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 苹果
# 1 香蕉
# 2 西瓜
# 指定起始
for i, fruit in enumerate(fruits, start=1):
print(f"第{i}个: {fruit}")
# 配合列表修改
for i, name in enumerate(names):
if name == "李四":
names[i] = "修改后的名字"
七、Callable 类型注解
语法
python
from collections.abc import Callable, Iterator
# 接收一个函数作为参数
def execute(func: Callable[[int], str], value: int):
return func(value)
# 注解说明:
# Callable[[参数类型], 返回值类型]
# Callable[[int, str], bool] → 接收 (int, str) 返回 bool
# 返回生成器
def stream(func: Callable[[str], Iterator[str]]):
...
八、zip
语法
python
zip(可迭代对象1, 可迭代对象2, ...)
案例
python
names = ["张三", "李四", "王五"]
scores = [90, 85, 92]
# 合并两个列表
result = list(zip(names, scores))
print(result) # [("张三", 90), ("李四", 85), ("王五", 92)]
# 解包
for name, score in zip(names, scores):
print(name, score)
# 配合 sorted 按第二个列表排序
pairs = list(zip(names, scores))
pairs.sort(key=lambda x: x[1], reverse=True)
print(pairs) # 按分数从高到低排序