-
list不可哈希,因它是可变类型,不满足哈希要求:生命周期内哈希值不变且等值对象哈希值相同;字典key必须可哈希才能正确寻址;常见可哈希类型包括int、str、tuple(元素皆可哈希)、frozenset等;可用tuple(my_list)等方式转换list为可哈希形式。
-
提升正则可读性需用命名组、re.VERBOSE注释模式、逻辑拆分;预编译、分段组合、变量复用、单元测试、文档示例及re.DEBUG调试。
-
应使用ThreadPoolExecutor(max_workers=10–20)控制并发,避免直接创建大量线程;优先选用ipapi.co或ipinfo.io等稳定API并设置timeout和重试;CSV导出采用流式写入并规范编码与空值处理。
-
Python协程由事件循环驱动,通过await挂起与恢复实现协作式多任务;当协程执行await时让出控制权,事件循环调度其他任务运行,确保并发执行不阻塞I/O操作。
-
推荐按环境拆分settings文件:base.py抽公共配置,development.py和production.py各覆差异项;通过DJANGO_SETTINGS_MODULE指定,敏感配置(如SECRET_KEY)必须从环境变量或secretsbackend读取,严禁硬编码。
-
多线程文件读写需注意线程安全与资源管理。1.使用Lock保证写操作原子性,避免多线程同时写同一文件导致数据交错;2.推荐线程写独立临时文件后由主线程合并,或通过Queue集中处理写请求;3.各线程应独立使用withopen()打开关闭文件,防止句柄泄漏;4.GIL在I/O操作中释放,适合I/O密集型任务,CPU密集型应选多进程。正确控制访问方式可确保高效安全。
-
GIL是CPython的全局解释器锁,确保同一时刻仅一个线程执行字节码;源于引用计数内存管理与C扩展兼容需求,虽经多次优化(如3.7时间切片、3.12子解释器),仍限制多核CPU密集型并发,需用multiprocessing、nogil扩展或替代解释器应对。
-
StringIO和BytesIO是内存中的类文件对象,应直接传给json.load()等函数,而非套用open();StringIO处理str,BytesIO处理bytes;注意seek(0)、编码、内存占用及Python2/3兼容性。
-
Python变量是对象引用而非值容器,赋值即绑定引用;不可变对象重新赋值会重绑引用,可变对象原地修改影响所有引用;函数参数为对象引用传递,可变对象修改对外可见;复制需区分浅拷贝与深拷贝。
-
母版控制全局样式但不直接影响幻灯片,修改需操作presentation.slide_master;布局继承母版,新幻灯片才生效;图表须用占位符预设,字体需逐层设置中文字符集。
-
Python函数传递列表时采用“按对象引用传递”,函数内修改列表会影响原始数据,因列表是可变对象。例如,调用process_list(my_list)并执行append()或修改元素,会直接改变外部的my_list。但若在函数内将参数重新赋值(如a_list=['new']),则后续操作仅作用于新对象,不影响原列表。为避免意外修改,应使用切片[:]、list()或copy.deepcopy()创建副本,尤其当列表嵌套可变对象时需用深拷贝。建议函数优先返回新列表而非修改原列表,以遵循纯函数原则,提升代码可预
-
该用select_related时是查询外键或一对一字段且需避免N+1查询;它通过JOIN一次性获取关联数据,仅适用于正向外键/一对一关系,不支持多对多或反向关系。
-
Python内存碎片主要由CPython两层分配机制导致:小对象用pymalloc易产生内部碎片,大对象依赖系统malloc受底层碎片影响;可通过复用容器、__slots__、join替代+=、生成器、gc调优及替换jemalloc等手段缓解。
-
应使用ManifestStaticFilesStorage替代StaticFilesStorage,它通过文件内容哈希生成带指纹的静态文件名(如main.a1b2c3d4.js),配合{%static%}标签和collectstatic生成的staticfiles.json实现精准缓存更新,但需注意生产环境启用、避免硬编码路径、确保构建流程正确及CDN/Nginx缓存策略适配。
-
一维前缀和用长度n+1数组存储,prefix[i]表示前i个元素和,查询[l,r]为prefix[r+1]-prefix[l];二维需多开行列,用容斥公式prefixr2+1-prefixr1-prefixr2+1+prefixr1。