Python 语法精炼26
Python 的动态代码执行机制:exec、eval、compile,这是 Python 运行时最具“元编程”特性的部分之一。 动态代码执行 Python 是动态语言,代码本身可以在运行时被生成、修改、再执行。这类能力主要通过三个内置函数实现: 函数 用途 eval(expr) 计算一个表达式字符串,返回结果 exec(code) 执行一段任意 Python 代码,不返回值 compile(source, filename, mode) 把字符串或 AST 编译成可执行代码对象,可配合 exec/eval 使用 这种机制是 Python 解释器的动态执行接口,常用于: 动态生成代码,如 DSL、模板、动态函数; 交互式解释器 / 脚本执行器; 元编程 / 插件系统; 调试、沙盒执行。 eval():动态求值表达式 语法 1eval(expression, globals=None, locals=None) 功能 只能执行“单个表达式”字符串,如"2 + 3", "a * b + c" 等; 返回表达式求值...
Python 语法精炼25
itertools 模块 itertools 模块提供了一系列高性能的迭代器生成函数,这些函数可以: 无缝组合(像拼积木一样) 惰性计算(按需生成,不一次性占用内存) 替代循环与列表推导式(更高效、更优雅) 导入方式: 1import itertools itertools 常见函数 类别 代表函数 功能说明 迭代器生成器 count(), cycle(), repeat() 创建无限序列 迭代器切片与选择 islice(), takewhile(), dropwhile(), filterfalse() 从迭代器中有条件地截取元素 迭代器组合 chain(), zip_longest(), product(), combinations() 组合或排列多个迭代器 分组与聚合 groupby(), accumulate() 对连续数据分组或累积 其他工具 tee(), starmap() 复制迭代器、展开元组调用函数 核心函数详解 itertools.chain():多个迭代器顺序连接 语法: 1itertools.chain(*itera...
Python 语法精炼24
Python 异步编程(Asynchronous Programming) 的核心语法部分,是 Python3.5+ 的重要特性之一,涉及: 协程(coroutine)机制:async def / await / async for / async with 同步 vs 异步 同步(Synchronous) 代码 逐行执行,一行没结束前下一行不会开始: 1234567891011def fetch_data(): time.sleep(3) # 阻塞3秒 return "data"def main(): print("Start") data = fetch_data() print("Got:", data) print("End")main() 执行顺序固定:Start → 等3秒 → Got: data → End 异步(Asynchronous) 异步程序 允许挂起等待任务完成,在等待期间可以执行其他任务。 这不是多线程,而是 单线程并发 —— 通过事...
Python 语法精炼23
参数类型 在 Python 3.8+ 中,函数参数可以用以下语法形式定义: 12def func(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): pass 涉及三类关键的分隔符: 符号 含义 / 位置参数分界线(在此之前的参数必须通过位置传递) * 关键字参数分界线(在此之后的参数必须通过关键字传递) 无分隔符 既可用位置,也可用关键字传参 参数类别 位置参数(Positional arguments) 最常见的参数类型。 12def add(a, b): return a + b 调用方式: 12add(1, 2) # ✅ 位置传递add(a=1, b=2) # ✅ 关键字传递 注意:如果没有特殊声明,Python 默认允许既用位置又用关键字。 位置限定参数(Positional-only parameters) Python 3.8 新增 / 语法,用于限制某些参数只能通过位置传入,而不能使用关键字。 12def divide(a, b, /): return a / b 调用方式: ...
Python 语法精炼22
枚举 枚举(Enumeration)是一组 有名字的常量值。它的核心用途是: 让一组固定的、有限的值变得更清晰、更安全、更易维护。 比如:星期、颜色、状态码、权限等级等。 没有枚举 12345# 坏例子:直接用数字或字符串if status == 1: print("已启动")elif status == 2: print("已停止") 这段代码有问题: 可读性差:1 和 2 代表什么? 不安全:可能随意传入 3、“abc” 等错误值。 使用枚举 12345678910from enum import Enumclass Status(Enum): STARTED = 1 STOPPED = 2status = Status.STARTEDprint(status) # Status.STARTEDprint(status.name) # 'STARTED'print(status.value) # 1 枚举让代码语义更明确、类型更安全。 基本用法 定义枚举类 1234...
Python 语法精炼21
背景与目的 在 Python 中,很多类只是用来存放数据的(例如配置、记录、实体对象),它们通常包含: 一堆属性或者字段 一个 __init__ 构造函数 一个 __repr__、__eq__、__hash__ 等方法 手写这些方法既冗长又容易出错,因此: attrs 是一个第三方库(由 Hynek Schlawack 开发),最早解决了这个痛点; dataclasses 是 Python 3.7 引入的标准库,受 attrs 启发,提供类似功能。 dataclasses 模块详解 基本用法 123456from dataclasses import dataclass@dataclassclass Point: x: int y: int 等价于手写以下类: 12345678910class Point: def __init__(self, x: int, y: int): self.x = x self.y = y def __repr__(self): return f"Point(x=&...
Python 语法精炼20
类型注解(Type Hint) 基本概念 类型注解是一种 静态类型提示机制,用于在代码中标注变量、函数参数、返回值等的预期类型。 它不会改变 Python 的运行逻辑,只是为静态分析工具(如 mypy、pyright、pylance)提供类型信息。 📘 举例: 12def add(x: int, y: int) -> int: return x + y 运行时效果完全一样,但编辑器 / 检查工具能检测类型错误: 1add(1, "2") # 类型检查器会提示错误 语法结构 用途 语法 示例 变量注解 变量名: 类型 count: int = 0 函数参数 def func(x: 类型): def greet(name: str): 返回值 -> 类型 def f() -> float: 类属性 在类体内注解 name: str 类型别名 类型名 = 类型 Vector = list[float] 常用类型注解 类型 示例 说明 基本类型 int, float, bool, str 基...
Python 语法精炼19
异常 异常(Exception)是程序运行时出现的错误事件,它会中断正常执行流程,并转入异常处理机制。 例如: 1print(10 / 0) # ZeroDivisionError 输出: 1ZeroDivisionError: division by zero 程序遇到错误时,Python 会自动创建一个异常对象并抛出(raise),如果没有被捕获(handled),程序就会终止。 基本结构 Python 的异常处理使用 try、except、else、finally 四个关键字。 12345678try: # 可能出错的代码except SomeError: # 捕获异常else: # 没出错时执行finally: # 无论是否出错都会执行 📘 示例: 1234567891011try: x = int(input("请输入数字:")) result = 10 / xexcept ValueError: print("输入不是数字!")except ZeroDivisionError: ...
Python 语法精炼18
继承 在 Python 中,类可以从一个或多个父类继承: 12345class Parent: passclass Child(Parent): pass 当一个类从多个父类继承时,这就是多重继承。 123class A: passclass B: passclass C(A, B): pass C 同时继承了 A 和 B。 MRO MRO(方法解析顺序): 是指 Python 在多重继承中搜索属性和方法的顺序。 当你访问 obj.method() 时,Python 会按一定的顺序在类的继承链上查找 method,这个顺序由 MRO 列表 决定。 查看 MRO 两种常用方法: 12C.__mro__ # 返回一个元组C.mro() # 返回一个列表 示例: 123456class A: passclass B: passclass C(A, B): passprint(C.__mro__)# (<class '__main__.C'>, <class '__main__.A'>, <cl...
Python 语法精炼17
切片 切片(Slicing) 是对序列类型(如 list、str、tuple 等)进行区间访问的一种方式。 它允许你通过索引区间提取部分元素,而不修改原序列。 基本语法: 1seq[start:end:step] 参数 含义 默认值 start 起始索引(包含) 0 end 结束索引(不包含) 序列长度 step 步长 1 基础操作 123456nums = [0, 1, 2, 3, 4, 5]print(nums[1:4]) # [1, 2, 3] 取索引 1~3 的元素print(nums[:3]) # [0, 1, 2] 省略 start,默认为0print(nums[3:]) # [3, 4, 5] 省略 end,取到结尾print(nums[:]) # [0, 1, 2, 3, 4, 5] 复制整个列表 负索引 在 Python 中,索引可以为负数,表示从序列末尾开始计数。 索引 含义 -1 最后一个元素 -2 倒数第二个元素 -3 倒数第三个元素 📘 示例: ...
