Python学习笔记

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)  # 按分数从高到低排序
相关推荐
魔法阵维护师9 小时前
从零开发游戏需要学习的c#模块,第二十四章(场景管理 —— 标题、游戏、结束画面)
学习·游戏·c#
sheeta19989 小时前
LeetCode 每日一题笔记 日期:2026.05.23 题目:1752. 检查数组是否经排序和轮转得到
笔记·算法·leetcode
会编程的土豆9 小时前
Kafka 入门笔记(核心语法 + 用法)
笔记·分布式·kafka
wuxinyan1239 小时前
工业级大模型学习之路025:问题解决-检索质量全为0
人工智能·python·学习·langchain
weixin_408099679 小时前
2026 图片高清化 API 实战:AI超分辨率重建技术详解 + Python/Java/PHP/C#代码示例
图像处理·人工智能·python·超分辨率重建·石榴智能·图片变清晰·图片高清化api
Frostnova丶9 小时前
【算法笔记】最短路径算法
笔记·算法·图论
東雪木9 小时前
Java 基础语法与核心数据类型 专属复习笔记
java·开发语言·笔记·java面试
财经资讯数据_灵砚智能9 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月24日
大数据·人工智能·python·信息可视化·自然语言处理
happymaker06269 小时前
SpringBoot学习日记——DAY05(SpringBoot整合MyBatis-plus实现增删改查)
spring boot·学习·mybatis