news 2026/3/10 20:37:51

Python 常见问题梳理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 常见问题梳理

一、基础语法问题

1.缩进错误

# 错误示例ifTrue:print("Hello")# IndentationError# 正确示例ifTrue:print("Hello")

2.变量作用域混淆

x=10deffunc():x=20# 这是局部变量print(x)# 20func()print(x)# 10# 使用 global 关键字deffunc2():globalx x=30print(x)# 30

3.可变默认参数陷阱

# 错误示例deffunc(items=[]):items.append(1)returnitemsprint(func())# [1]print(func())# [1, 1] ❌# 正确示例deffunc(items=None):ifitemsisNone:items=[]items.append(1)returnitems

二、数据结构常见问题

1.列表浅拷贝 vs 深拷贝

importcopy# 浅拷贝list1=[[1,2],[3,4]]list2=list1.copy()# 或 list2 = list1[:]list1[0][0]=99print(list2)# [[99, 2], [3, 4]] ❌# 深拷贝list3=copy.deepcopy(list1)list1[0][0]=100print(list3)# [[99, 2], [3, 4]] ✅

2.字典键必须是不可变类型

# 错误示例# d = {[1,2]: "value"} # TypeError# 正确示例d={(1,2):"value",# 元组可以作为键"key":"value",123:"value"}

3.集合去重原理

# 基于 __hash__ 和 __eq__ 方法classPerson:def__init__(self,name,age):self.name=name self.age=agedef__hash__(self):returnhash((self.name,self.age))def__eq__(self,other):returnself.name==other.nameandself.age==other.age p1=Person("Alice",25)p2=Person("Alice",25)print(len({p1,p2}))# 1

三、函数与方法

1.参数传递方式

# 不可变对象:传值defmodify_num(x):x=100num=10modify_num(num)print(num)# 10# 可变对象:传引用defmodify_list(lst):lst.append(4)my_list=[1,2,3]modify_list(my_list)print(my_list)# [1, 2, 3, 4]

2.lambda 函数限制

# lambda 只能包含单个表达式# 错误:lambda x: if x>0: return x else: return -x# 正确:abs_val=lambdax:xifx>0else-x# 复杂的逻辑应该使用普通函数

3.闭包变量绑定

# 常见问题functions=[]foriinrange(3):functions.append(lambda:print(i))forfinfunctions:f()# 全部输出 2 ❌# 解决方案functions=[]foriinrange(3):functions.append(lambdax=i:print(x))forfinfunctions:f()# 0, 1, 2 ✅

四、面向对象编程

1.类变量与实例变量

classMyClass:class_var=0# 类变量def__init__(self,value):self.instance_var=value# 实例变量obj1=MyClass(1)obj2=MyClass(2)obj1.class_var=99# 创建实例属性,不会修改类变量MyClass.class_var=100# 修改类变量

2.继承与 super()

classParent:def__init__(self):print("Parent init")classChild(Parent):def__init__(self):super().__init__()# Python 3 语法print("Child init")

3.特殊方法strvsrepr

classPoint:def__init__(self,x,y):self.x=x self.y=ydef__str__(self):returnf"Point({self.x},{self.y})"def__repr__(self):returnf"Point(x={self.x}, y={self.y})"p=Point(1,2)print(str(p))# Point(1, 2)print(repr(p))# Point(x=1, y=2)

五、异常处理

1.正确捕获多个异常

try:# 可能出错的代码result=10/0except(ZeroDivisionError,ValueError)ase:print(f"Error:{e}")exceptExceptionase:print(f"Unexpected error:{e}")finally:print("Cleanup")

2.避免空的 except 语句

# 错误示例try:do_something()except:pass# 会捕获所有异常,包括 KeyboardInterrupt# 正确示例try:do_something()exceptExceptionase:# 不会捕获 KeyboardInterrupt, SystemExitlog_error(e)

六、模块与包

1.循环导入问题

# module_a.pyimportmodule_b# ❌ 循环导入deffunc_a():frommodule_bimportfunc_b# ✅ 延迟导入returnfunc_b()

2.name== “main

# 模块可以自己运行,也可以被导入defmain():print("This is the main function")if__name__=="__main__":main()# 直接运行脚本时执行

七、性能与内存

1.字符串拼接优化

# 低效result=""foriinrange(10000):result+=str(i)# 高效result="".join(str(i)foriinrange(10000))

2.列表推导式 vs 循环

# 更简洁且通常更快squares=[x**2forxinrange(10)ifx%2==0]# 生成器表达式(节省内存)squares_gen=(x**2forxinrange(10)ifx%2==0)

3.内存泄漏:循环引用

importgcclassNode:def__init__(self):self.parent=Noneself.children=[]# 创建循环引用parent=Node()child=Node()parent.children.append(child)child.parent=parent# 手动打破循环引用或使用弱引用importweakref child.parent=weakref.ref(parent)

八、Pythonic 编程

1.使用 enumerate

# 不推荐foriinrange(len(items)):print(i,items[i])# 推荐fori,iteminenumerate(items):print(i,item)

2.使用 zip

names=["Alice","Bob","Charlie"]ages=[25,30,35]forname,ageinzip(names,ages):print(f"{name}is{age}years old")

3.上下文管理器

# 传统方式f=open("file.txt","r")try:data=f.read()finally:f.close()# 使用 with 语句withopen("file.txt","r")asf:data=f.read()

九、常见错误与调试

1.TypeError: ‘X’ object is not callable

# 通常是因为把变量名用作函数list=[1,2,3]# ❌ 覆盖了内置函数 list# list( (4,5,6) ) # 错误!lst=[1,2,3]# ✅ 使用不同的变量名

2.AttributeError: module ‘X’ has no attribute ‘Y’

# 常见原因:# 1. 拼写错误# 2. 未正确导入子模块# 3. 有同名的.py文件在搜索路径中

3.使用调试工具

importpdbdefbuggy_function():pdb.set_trace()# 设置断点# 调试代码# 常用命令:n(ext), s(tep), c(ontinue), l(ist), p(rint)

十、版本差异

Python 2 vs Python 3

# 1. print 函数print"Hello"# Python 2print("Hello")# Python 3# 2. 整数除法3/2# Python 2: 1, Python 3: 1.53//2# 两者都是: 1# 3. Unicodestr_type=type("hello")# Python 2: <type 'str'>, Python 3: <class 'str'>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/7 11:48:21

使用Peft对Qwen2.5-7B-Instruct进行Lora微调|轻量高效适配业务场景

使用Peft对Qwen2.5-7B-Instruct进行Lora微调&#xff5c;轻量高效适配业务场景 引言&#xff1a;为何选择Lora微调Qwen2.5-7B-Instruct&#xff1f; 在大模型落地业务场景的过程中&#xff0c;全参数微调&#xff08;Full Fine-tuning&#xff09;虽然效果显著&#xff0c;但其…

作者头像 李华
网站建设 2026/2/27 9:34:16

告别复杂配置|AI 单目深度估计 - MiDaS镜像开箱即用

告别复杂配置&#xff5c;AI 单目深度估计 - MiDaS镜像开箱即用 “一张照片&#xff0c;还原三维世界” —— 无需GPU、无需Token、无需代码&#xff0c;基于Intel MiDaS的CPU版WebUI镜像&#xff0c;真正实现零门槛3D空间感知。 在自动驾驶、AR/VR、机器人导航等前沿领域&…

作者头像 李华
网站建设 2026/3/4 21:47:40

自动化测试ROI的量化困境与核心价值维度

行业现状痛点 模糊的价值认知&#xff1a;78%团队仅凭"感觉"评估自动化价值&#xff08;来源&#xff1a;ISTQB 2025全球调研&#xff09; 成本统计缺失&#xff1a;忽略环境维护、脚本重构、适配升级等隐性成本 效益衡量片面&#xff1a;仅关注用例数量与执行时长…

作者头像 李华
网站建设 2026/3/4 0:54:19

快速上手3D感知AI|AI 单目深度估计 - MiDaS镜像使用全攻略

快速上手3D感知AI&#xff5c;AI 单目深度估计 - MiDaS镜像使用全攻略 &#x1f310; 技术背景&#xff1a;从2D图像到3D空间的跨越 在计算机视觉领域&#xff0c;单目深度估计&#xff08;Monocular Depth Estimation, MDE&#xff09; 是一项极具挑战性的任务。传统三维感知…

作者头像 李华
网站建设 2026/3/5 23:49:57

深度估计不再难|基于Intel MiDaS官方模型的稳定镜像推荐

深度估计不再难&#xff5c;基于Intel MiDaS官方模型的稳定镜像推荐 &#x1f310; 技术背景&#xff1a;单目深度估计为何重要&#xff1f; 在计算机视觉领域&#xff0c;从一张普通2D图像中恢复3D空间结构一直是极具挑战性的任务。传统方法依赖双目立体匹配或多帧运动视差&…

作者头像 李华
网站建设 2026/3/4 3:02:42

‌安全漏洞扫描API测试

API安全测试已进入智能化、集成化、国产化新阶段‌在2025年&#xff0c;API安全漏洞扫描不再是“可选的辅助测试”&#xff0c;而是‌CI/CD流水线中必须嵌入的左移安全控制点‌。基于OWASP API Security Top 10:2025的最新框架、本土真实攻击案例与主流工具演进趋势&#xff0c…

作者头像 李华