-
logging比print更专业,因其实现了Logger、Handler、Formatter三层解耦,支持多级过滤与滚动写入;basicConfig仅在root未配置时生效,模块化项目应显式创建logger及handler;RotatingFileHandler可实现按大小轮转,需设置maxBytes和backupCount;一个logger可绑定多个handler以同时输出到控制台和文件,但需分别设置各级别;日志输出需同时满足logger和handler的level,且默认propagate为True。
-
预定义字符类在正则表达式中提升效率与可读性。\d匹配数字,\D匹配非数字,\w匹配单词字符,\W匹配非单词字符,\s匹配空白符,\S匹配非空白符。常见用途包括:1.用\d提取电话号码或价格;2.用\s清理多余空格或换行;3.用^[a-zA-Z_]\w*$校验变量名合法性。注意大小写互斥、语言差异、避免过度依赖及正确转义反斜杠,以确保精准匹配。
-
f-string(格式化字符串字面量)是Python3.6引入的最简洁、高效、可读性最强的字符串格式化方式。它直接在字符串前加f或F,花括号内写表达式,运行时实时求值并转换为字符串。基础用法:变量插值与表达式计算只需在字符串前加f,把变量或任意合法表达式放进{}中即可:name="Alice";age=30;print(f"Hello,{name}.Youare{age}yearsold.")→Hello,Alice.Youare30yearsol
-
asyncio.wait不控制任务执行顺序,仅并发等待可等待对象完成;需顺序执行时应直接await,有依赖的并发任务应封装为内部串行的协程单元。
-
reduce是functools模块中用于序列累积运算的函数,需传入二元函数、非空可迭代对象及可选初始值,如reduce(lambdax,y:x+y,[1,2,3,4])返回10。
-
处理大文件应避免全量加载内存,优先采用流式、分块或延迟加载方式:逐行读取、mmap随机访问、ijson/xml流解析、csv.DictReader+islice跳行、gzip/bz2直接解压、dask/polars替代pandas、sqlite3加速过滤,并用with管理句柄、psutil监控内存、ThreadPoolExecutor重叠IO。
-
加User-Agent仍403是因为网站需Referer和Cookie等组合校验:Referer须匹配合法上级页面,Cookie需时效有效且环境一致,缺一即拦截。
-
axis=0插入行,axis=1插入列;axis指被操作的维度,与插入位置无关,只决定新增数据方向。
-
Flask-Mail初始化失败主因是未在应用上下文中调用send(),需确保绑定app且发信时处于app_context;SMTP配置需匹配端口与加密方式;异步发信应使用flask-executor或Celery并手动管理上下文。
-
pack_forget()并未销毁组件,仅临时移除布局;组件对象、事件绑定和属性均保持有效,与destroy()的不可逆性有本质区别。
-
vars()本质是obj.__dict__的安全封装,仅对拥有__dict__的对象有效;无__dict__时(如__slots__类、内置类型)会抛TypeError,此时应改用hasattr检查或dir()+getattr组合获取属性。
-
Python迭代器协议核心是__iter__和__next__两个方法:前者返回迭代器对象(可为self或新实例),后者返回下一项或抛StopIteration;遵守该协议即支持for循环等操作,无需继承或装饰。
-
itertools.chain(*nested)是展开双层嵌套列表最省事的方法,不建中间列表、不递归、纯流式拼接,但需解包且要求子项为非字符串可迭代对象。
-
Canny边缘检测是OpenCV中目标边缘检测的核心方法,包含高斯滤波、梯度计算、非极大值抑制和双阈值滞后阈值化四步;需先灰度化、高斯去噪,合理设置双阈值,并辅以膨胀、轮廓提取等后处理提升实用性。
-
nlargest比排序更快是因为它仅维护大小为k的最小堆,时间复杂度O(nlogk),避免全量排序O(nlogn);当k接近n时优势消失,且返回结果不保证内部有序。