当前位置:首页>python>大模型开发入门第十三讲:Python 高级语法

大模型开发入门第十三讲:Python 高级语法

  • 2026-09-11 14:48:20
大模型开发入门第十三讲:Python 高级语法
上一章我们学习了 Python 模块与包,掌握了代码复用、工程化组织的核心方法。本章将学习Python 高级语法,涵盖浅拷贝与深拷贝、迭代器、生成器、命名空间与作用域、闭包、装饰器六大核心知识点,彻底掌握 Python 进阶用法,为大模型开发、复杂项目编写打下坚实基础。

13.1 浅拷贝与深拷贝

Python 中数据拷贝分三种形式,核心区别在于是否独立、是否拷贝子对象。

  • 直接赋值:仅传递对象引用,不创建新对象
  • 浅拷贝:仅拷贝父对象,不拷贝内部子对象
  • 深拷贝:完全拷贝父对象 + 所有子对象,完全独立

13.1.1 浅拷贝实现

import copy# 原始列表(包含不可变类型+可变子列表)list1 = [1, 2, 3, [100, 200, 300]]# 浅拷贝list2 = copy.copy(list1)# 修改不可变元素,互不影响list1[0] = 100# 修改可变子对象,互相影响list1[3].append(400)print(list1)  # [100, 2, 3, [100, 200, 300, 400]]print(list2)  # [1, 2, 3, [100, 200, 300, 400]]

13.1.2 深拷贝实现

import copylist1 = [1, 2, 3, [100, 200, 300]]# 深拷贝list3 = copy.deepcopy(list1)# 修改任意元素,均互不影响list1[0] = 100list1[3].append(400)print(list1)  # [100, 2, 3, [100, 200, 300, 400]]print(list3)  # [1, 2, 3, [100, 200, 300]]

13.1.3 拷贝特殊情况

    • 非容器类型(数字、字符串)无拷贝概念,地址相同
    • 仅含原子类型的元组,深拷贝也不会创建新对象

    13.2 迭代器

    迭代器是可记住遍历位置的对象,只能向前遍历,是 Python 遍历容器的核心机制。

    • 可迭代对象 (Iterable):能直接用 for 循环遍历(list、tuple、str、dict 等)
    • 迭代器 (Iterator):实现__iter__()和__next__()方法的对象
    from collections.abc import Iterable, Iterator# 判断可迭代对象print(isinstance([], Iterable))  # True# 判断迭代器print(isinstance(iter([]), Iterator))  # True

    13.2.2 迭代器使用

    # 创建迭代器lst = [1, 2, 3]it = iter(lst)# 逐个取值print(next(it))  # 1print(next(it))  # 2# for循环自动遍历迭代器for i in it:    print(i)

    13.2.3 自定义迭代器

    class Reverse:    def __init__(self, data):        self.data = data        self.index = len(data)    def __iter__(self):        return self    def __next__(self):        if self.index == 0:            raise StopIteration        self.index -= 1        return self.data[self.index]# 反向遍历rev = Reverse([1,2,3,4])for num in rev:    print(num)

    13.3 生成器

    生成器是简化版迭代器,用yield返回值,暂停执行,按需生成数据,节省内存。

    13.3.1 创建生成器

    1. 1、推导式创建
    # 生成器表达式gen = (x for x in range(5))for i in gen:    print(i)
    1. 2、函数 + yield 创建
    # 斐波那契数列生成器def fibo():    a, b = 0, 1    while True:        yield b        a, b = b, a + bf = fibo()print(next(f))  # 1print(next(f))  # 1print(next(f))  # 2

    13.3.2 生成器 send () 方法

    向生成器发送数据,控制生成器执行逻辑:

    def gen():    task_id = 0    while True:        if task_id == 0:            task_id = yield "数字任务"        else:            task_id = yield "字符任务"g = gen()next(g)print(g.send(1))  # 字符任务print(g.send(0))  # 数字任务

    13.4 命名空间

    命名空间是名称到对象的映射,用于避免重名冲突,Python 有三类命名空间:

    1. 内置命名空间:解释器启动创建,包含内置函数 / 异常
    2. 全局命名空间:模块加载创建,当前模块的变量 / 函数 / 类
    3. 局部命名空间:函数调用创建,函数内部变量,调用结束销毁

    13.5 作用域

    作用域是可直接访问命名空间的代码区域,Python 有四层作用域:

    1. 局部作用域 (Local):函数内部,优先查找
    2. 嵌套作用域 (Enclosing):外层闭包函数
    3. 全局作用域 (Global):模块层级
    4. 内置作用域 (Built-in):Python 内置名称

    关键字说明

    • global:声明变量为全局作用域
    • nonlocal:声明变量为外层嵌套作用域

    13.6 闭包

    闭包可以保存函数内部数据,在函数执行完毕后仍可复用,满足三个条件:

    1. 1、外部函数内定义内部函数
    2. 2、内部函数使用外部函数变量
    3. 3、外部函数返回内部函数
    # 线性函数闭包def linear(a, b):    def inner(x):        return a * x + b    return inner# 生成不同线性函数y1 = linear(1, 1)print(y1(5))  # 6y2 = linear(2, 3)print(y2(5))  # 13

    13.7 装饰器

    装饰器不修改原函数代码,动态添加功能,本质是接收函数、返回新函数的闭包。

    13.7.1 基础装饰器

    # 装饰器:给函数添加绝对值处理def abs_decorator(func):    def inner(x):        x = abs(x)        return func(x)    return inner# 语法糖使用装饰器@abs_decoratordef sqrt_num(x):    import math    return math.sqrt(x)print(sqrt_num(-4))  # 2.0

    13.7.2 多层装饰器

    离函数最近的装饰器先执行:

    def int_decorator(func):    def inner(x):        x = int(x)        return func(x)    return inner@int_decorator@abs_decoratordef sqrt_num(x):    import math    return math.sqrt(x)print(sqrt_num("-9"))  # 3.0

    13.7.3 带参数装饰器

    def repeat(n):    def decorator(func):        def inner(x):            for _ in range(n):                x = func(x)            return x        return inner    return decorator@repeat(2)def sqrt_num(x):    import math    return math.sqrt(abs(x))print(sqrt_num(256))  # 2.0

    13.7.4 类装饰器

    实现__call__()方法的类可作为装饰器:

    class AbsDecorator:    def __init__(self, func):        self.func = func    def __call__(self, x):        return self.func(abs(x))@AbsDecoratordef sqrt_num(x):    import math    return math.sqrt(x)print(sqrt_num(-16))  # 4.0

    本章核心总结

    • 拷贝
      :浅拷贝仅独立第一层,深拷贝完全独立,按需选择
    • 迭代器
      :实现__iter__/__next__,惰性遍历节省内存
    • 生成器
      :yield暂停执行,按需生成数据,Python 高效遍历核心
    • 命名空间 + 作用域
      :避免重名,global/nonlocal精准控制变量
    • 闭包
      :保存函数内部数据,实现数据隐藏与状态保留
    • 装饰器
      :无侵入式增强函数功能,Python 高阶编程必备
    掌握本章高级语法,你的 Python 编程能力将完成从基础到进阶的跨越,轻松应对大模型开发、数据处理、框架开发等复杂场景。

    最新文章

    随机文章