每日 14

python:

  1. 变量作用域与闭包
    x = 10
    def func():
    print(x) # 尝试读取全局变量
    x = 20 # 局部变量赋值 → 触发 UnboundLocalError
    func()
    注意:在函数内修改全局变量需用 global 关键字,读取外层变量需用 nonlocal。

  2. 可变对象作为函数参数
    def modify(lst):
    lst.append(4)

my_list = [1, 2, 3]
modify(my_list)
print(my_list) # [1, 2, 3, 4] → 原列表被修改
建议:若不想修改原对象,传入副本(如 lst.copy())。

  1. 深拷贝与浅拷贝
    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] → 深拷贝完全独立
  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 模块。

posted @ 2025-03-27 20:15  一如初见233  阅读(33)  评论(0)    收藏  举报