Python 语法精炼10
上下文管理器 在 Python 中,上下文管理器是一种对象,它定义了程序在进入和退出某个运行环境时的行为。 简单说: “上下文管理器可以在一段代码执行前后自动执行特定操作。” 最常见的例子: 12with open('data.txt', 'r') as f: content = f.read() 这段代码的行为是: 进入上下文:调用 open() → 创建文件对象。 执行代码块:with 缩进内的语句。 退出上下文:自动调用 f.close(),即使中途发生异常也会关闭文件。 工作原理 语法结构 12with 表达式 [as 变量]: 代码块 工作流程 执行 表达式,获取一个上下文管理器对象。 调用该对象的 __enter__() 方法。 如果有 as 变量,将 __enter__() 的返回值赋给 变量。 执行 with 代码块中的语句。 当代码块执行完毕(无论是否发生异常): 调用对象的 __exit__(exc_type, exc_value, traceback)。 __exit__ 决定...
Python 语法精炼9
基本概念:短路求值 and、or 在 Python 中按照 从左到右 的顺序求值。 短路规则: A and B:先求 A,如果 A 是 假值(falsy),直接返回 A(不计算 B);否则返回 B 的值(会计算 B)。 A or B:先求 A,如果 A 是 真值(truthy),直接返回 A(不计算 B);否则返回 B 的值(会计算 B)。 注意:and/or 不一定返回 True/False,而是返回其中一个操作数(第一个决定结果的操作数或最后一个操作数)。 真值 / 假值(truthy / falsy) 在布尔上下文中,以下常被视为假值(falsy): False, None 数值 0, 0.0, 0j 空序列/集合:'', (), [], {}, set() 自定义对象如果实现 __bool__() 返回 False 或 __len__() 返回 0 其它一般都是真值(truthy) 返回值规则 1234567891011121314151617# or 示例>>> "a" or "b"'...
Python 语法精炼8
字符串格式化 方法 Python 版本 示例 % 运算符格式化 Python 2+ "Hello %s" % name str.format() 方法 Python 2.6+ "Hello {}".format(name) f-string(格式化字符串字面量) Python 3.6+ f"Hello {name}" 方式一:旧式 C 风格的 % 格式化 Python 最早的字符串格式化方式,语法类似于 C 语言的 printf。 基本用法 123name = "Alice"age = 25print("My name is %s and I'm %d years old." % (name, age)) 输出: 1My name is Alice and I'm 25 years old. 常见格式说明符 符号 含义 示例 %s 字符串(str()) %s %r 原始表示(repr()) %r %d 十进制整数...
Python 语法精炼7
下划线常见用法 形式 名称 常见用途 示例 _ 单下划线 临时变量 / 忽略值 / 上一次结果 _ = 5,for _ in range(3) _var 单前导下划线 弱“内部使用”标识(受保护属性) _helper() __var 双前导下划线 名称改写(Name Mangling),避免子类冲突 self.__count var_ 单尾下划线 避免与关键字冲突 class_ = "MyClass" __var__ 双前后下划线 Python 特殊方法或魔术方法(magic methods) __init__, __len__ 下划线详细讲解 _ 单下划线 📌 含义 1:忽略的变量(占位符) 当变量值不重要时,使用 _ 表示“我不关心这个值”: 12for _ in range(5): print("Hello") 表示循环 5 次,但不关心循环变量。 再比如: 1x, _, y = (1, 2, 3) 忽略中间的值。 📌 含义 2:交互式解释器中上一个结果 在 Python REPL(交互模...
Python 语法精炼6
海象运算符 海象运算符是指 :=,在 Python 3.8 中首次引入。 它的正式名称是 赋值表达式(Assignment Expression)。 这个符号之所以被称为“海象运算符”,是因为它看起来像一个海象的眼睛和獠牙::= 基本作用 它的作用是: 在表达式内部进行赋值操作(即“边计算边赋值”)。 也就是说,你可以在一个表达式中给变量赋值,而不用单独写一行。 使用普通赋值 123n = len(data)if n > 10: print(f"数据太长,有 {n} 个元素") 使用海象运算符 12if (n := len(data)) > 10: print(f"数据太长,有 {n} 个元素") n := len(data) 会先计算 len(data),将结果赋给 n,然后返回这个值用于比较。 应用场景 在条件语句中减少重复计算 12if (line := input("请输入: ")) != "exit": print(&...
Python 语法精炼5
星号表达式与解包 *args:函数接收任意位置参数 作用:把额外的位置参数收集为一个 tuple。 123456def summarize(*args): # args 是 tuple return sum(args)print(summarize(1, 2, 3)) # 6print(summarize()) # 0 要点 *args 可以出现在参数列表中任意位置,但惯例写在普通位置参数之后、关键字参数之前:def f(a, b, *args, kw=0): 在函数内部,args 是 tuple(不可变)。 多个星号参数不允许(只能有一个 * 捕获位置参数)。 常见用法 聚合任意数量的位置参数(统计、拼接等)。 与普通参数组合,做默认或强制参数数量检查。 注意: *args 捕获的是位置参数,不会捕获以 name=value 形式传入的关键字参数(那些会进 **kwargs)。 **kwargs:函数接收任意关键字参数 作用:把额外的关键字参数收集为一个 dict。 123456def show(**kwargs): # kwar...
压缩感知、稀疏优化、超分辨概念辨析
本文详细解析了压缩感知(CS)、稀疏优化(SO)、超分辨(SR)的概念以及应用。
Python 语法精炼4
列表推导式 基本语法 1[表达式 for 变量 in 可迭代对象 if 条件] 等价于: 1234result = []for 变量 in 可迭代对象: if 条件: result.append(表达式) 可以省略 if(表示不过滤); 表达式部分可以是任意计算或函数调用; 推导式返回的是一个新的列表对象。 常见用法 过滤元素 12[x for x in nums if x % 2 == 0]→ [2, 4] 嵌套循环 12[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]→ [(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)] 二维展开 12[x for row in matrix for x in row]→ [1,2,3,4,5,6] 技巧与陷阱 项目 要点 执行顺序 从左到右写,左外右内执行 可读性 不建议嵌套超过两层,否则不如显式 for 性能 较普通循环更快(底层优化),但不是“懒加载” 推导式 = 简洁高效的 ...
Shadowsocks 搭建
本文详细介绍了Shadowsocks部署VPN全流程,利用Clash软件实现代理。
Python 语法精炼3
迭代器机制 在 Python 中,iter() 是一个内置函数,用来从“可迭代对象”中创建一个迭代器对象。 类比理解: 想象你有一本书 📖(列表 [1,2,3]) nums 就是整本书(可迭代对象) it = iter(nums) 就像拿到一个“书签”(迭代器对象) 每次 next(it) → 翻到下一页,读一个内容 当读完所有页时,再 next(it) 就会报错:StopIteration 思考下面题目👇 123456nums = [1, 2, 3]it = iter(nums)print(next(it)) # 1nums.append(4) # nums = [1, 2, 3, 4]print(next(it)) # 2print(next(it)) # 3 可迭代对象 vs 迭代器 概念 含义 关键方法 示例 Iterable(可迭代对象) 能够被“遍历”的对象,可以用 for __iter__() list, tuple, str, set, dict Iterator(迭代器) 记得“当前取到哪”的对象,可用 next() __it...






