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)  # 按分数从高到低排序
相关推荐
NaclarbCSDN4 分钟前
我写了一个命令行书签管理器,然后抛弃了浏览器书签栏
linux·git·python·github
三品吉他手会点灯10 分钟前
STM32F103 学习笔记-24-I2C-读写EEPROM(第4节)-STM32的I2C通讯过程
笔记·stm32·学习
江屿风23 分钟前
C++图论基础单源最短路-常规版dijkstra算法/堆优化版dijkstra算法/bellman-ford 算法/spfa 算法流食般投喂
开发语言·c++·笔记·算法·图论
颖火虫盟主26 分钟前
Linux USB 探测→枚举→RNDIS 驱动匹配 全流程笔记
linux·运维·笔记
长葡萄的叶子31 分钟前
Transformer:让机器读懂上下文的艺术
笔记·transformer
相醉为友32 分钟前
Trae IDE WSL2/SSH 环境网络故障排查笔记
ide·笔记·ssh
又是进步的一天35 分钟前
一台虚拟机学习CI流程
学习·ci/cd·云原生·容器·kubernetes·devops
沪漂阿龙37 分钟前
LangChain 系列之Tools:让大模型真正连接业务系统
人工智能·python·langchain
程序猿编码39 分钟前
子域猎手:一款高性能DNS枚举工具的设计与实现
linux·c++·python·c·dns
问心无愧05131 小时前
ctfshow web入门114
android·前端·笔记