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)  # 按分数从高到低排序
相关推荐
xxwl5853 分钟前
第六章---计算几何
笔记·学习·算法
minglie14 分钟前
Visual Studio问题
学习
其实防守也摸鱼6 分钟前
存储管理:页面置换算法学习任务(测验题要求给出置换页面顺序,缺页次数,缺页率)
android·前端·数据库·学习·oracle·自动化
ss27313 分钟前
AI时代首先数据库-PostgreSQL实战笔记 | 12 PostgreSQL数据目录与重要文件结构
数据库·笔记·postgresql
dadaobusi18 分钟前
学习: gdb自动捕获调用栈
学习
Song_RsHt21 分钟前
Gateway (上):路由与转发,微服务的统一入口
java·笔记·后端·学习·gateway
把我格子衫拿来23 分钟前
误差预算怎么做?从雅可比到蒙特卡洛的三维定位不确定度分析
python·蒙特卡洛·三维定位·误差分析·不确定度
2603_9695792840 分钟前
备份云盘是什么意思?简单说就是“用云盘来备份数据”
学习
文章永久免费只为良心1 小时前
Ctfshow_Web应用安全与防护_第二章_无字母数字命令执行
前端·python·安全·网络安全·渗透测试·ctf·红队渗透测试
2601_962885721 小时前
如何用 Python 获取上证指数、沪深300、中证500 等指数行情?
开发语言·python