python:
-
变量作用域与闭包
x = 10
def func():
print(x) # 尝试读取全局变量
x = 20 # 局部变量赋值 → 触发 UnboundLocalError
func()
注意:在函数内修改全局变量需用 global 关键字,读取外层变量需用 nonlocal。 -
可变对象作为函数参数
def modify(lst):
lst.append(4)
my_list = [1, 2, 3]
modify(my_list)
print(my_list) # [1, 2, 3, 4] → 原列表被修改
建议:若不想修改原对象,传入副本(如 lst.copy())。
- 深拷贝与浅拷贝
import copy
a = [[1, 2], [3, 4]]
b = copy.copy(a) # 浅拷贝
c = copy.deepcopy(a) # 深拷贝
a[0].append(5)
print(b[0]) # [1, 2, 5] → 浅拷贝共享嵌套对象
print(c[0]) # [1, 2] → 深拷贝完全独立 - 异常处理的细节
python
复制
try:
1 / 0
except: # 不指定异常类型 → 可能掩盖错误
pass
正确做法:
try:
1 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
5. GIL 与多线程
import threading
CPU密集型任务用多线程反而更慢
def heavy_task():
sum(range(10**7))
threads = [threading.Thread(target=heavy_task) for _ in range(2)]
for t in threads:
t.start()
for t in threads:
t.join() # 实际执行时间 ≈ 单线程的两倍(GIL限制)
替代方案:CPU 密集型任务使用 multiprocessing 模块。