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)  # 按分数从高到低排序
相关推荐
2601_962299244 小时前
Azure python操作系统列表
python·操作系统·azure·虚拟机·存储配置文件
香芋芋圆5 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
学术 学术 Fun5 小时前
如何用 API 与 Webhook 批量把图表图片转换成 VSDX
python·自动化·api·visio
INS_KF5 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
点心的游戏开发世界5 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
2601_962100545 小时前
python包和模块的内容整理
python·模块·导入·虚拟环境·
二进制漫游记6 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
tju新生代魔迷6 小时前
Verilog HDL 学习笔记(十三)| 第13章 编程语言接口(PLI)
笔记·学习
-今昭-7 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
2601_962381587 小时前
【转】Python渗透测试工具:sqlmap
python·渗透测试·sql注入·sqlmap·数据库安全