RSS
菜单
社区成员个人主页
阿成员
DEV CN / 成员主页

阿青 · 社区话题账号

查看阿青 · 社区话题账号发布的技术文章、关注圈子与公开讨论。

0技术文章4关注圈子467圈内发布1关注者
COMMUNITY POSTS

交流圈发布内容

作者在不同技术圈子中的观点与讨论

1
# Python

Python 的 import 机制?相对导入和绝对导入?

import 执行三步:① 查找模块(sys.path 搜索:当前目录、PYTHONPATH、标准库、site-packages);② 编译(缓存 .pyc);③ 执行模块代码并缓存到 sys.modules(重复 import 不重复执行)。绝对导入:import package.module,基于 sys.path;相对导入:from . import module(. 当前包、.. 父包),仅限包内使用(模块用 __name__…

2
# Python

Python 的异常处理:try/except/else/finally 执行顺序?

执行顺序:try 块正常 → 无异常执行 else(有异常跳过)→ finally 无论如何都执行。捕获:except 按顺序匹配(多 except 从上到下);except Exception 捕获通用异常,except (A, B) 捕获多个;except: 裸捕获所有(不推荐)。注意:① finally 中 return 会覆盖 try 中的 return;② else 中若再抛异常不会被前面 except 捕获;③ BaseEx…

3
# Python

Python 的 with 语句和上下文管理器怎么实现?

with 语句自动管理资源的获取与释放(最常用于文件、锁、数据库连接)。实现方式:① 类实现 __enter__(进入时返回资源)和 __exit__(退出时清理,返回 True 抑制异常);② contextlib.contextmanager 装饰器配合 yield 分隔进入/退出逻辑:@contextmanager def cm(): 准备; yield 资源; 清理。__exit__ 参数 exc_type/exc_val/ex…

4
# Python

Python 的可变类型与不可变类型有哪些?

不可变类型:int、float、bool、str、tuple、frozenset、bytes——对象创建后内容不可改,修改会生成新对象;可变类型:list、dict、set、自定义对象——可原地修改。影响:① 传参时不可变对象按值效果(修改不影响外部),可变对象修改会反映到外部(坑);② 不可变类型可哈希(可作 dict key/set 元素),可变类型不可哈希;③ 拼接、+= 行为差异(str 每次生成新对象,list 原地)。

5
# Python

Python 2 和 Python 3 的主要区别有哪些?

① print:2 是语句 print x,3 是函数 print(x);② 整数除法:2 中 5/2=2(整除),3 中 5/2=2.5(真除法,// 整除);③ 字符串:2 默认字节串、有 unicode 类型,3 默认 Unicode(str);④ range:2 返回列表(xrange 迭代器),3 返回迭代器;⑤ input:2 中 raw_input,3 中 input 统一;⑥ 异常语法:2 中 except E, e,3…

6
# Python

Python 的垃圾回收机制是怎样的?

Python 采用引用计数为主、标记清除与分代回收为辅:① 引用计数:每个对象记录被引用次数,为 0 立即回收,缺点是无法处理循环引用;② 标记清除:解决循环引用——从根对象出发标记可达对象,清除不可达(多用于容器对象);③ 分代回收:对象分三代(0/1/2),新对象在 0 代,每代回收阈值递增(gc.get_threshold 查看),减少全量扫描。模块 gc 可手动触发 gc.collect()、关闭分代。注意:__del__ 与循…

7
# Python

Python 深浅拷贝有什么区别?copy 模块怎么用?

浅拷贝(copy.copy):只复制最外层对象,内层可变对象仍是引用(共享);深拷贝(copy.deepcopy):递归复制所有层级,完全独立。赋值 = 只是绑定同一对象(不复制)。注意:深拷贝可能递归很深、对含递归引用的对象要处理,copyreg 可定制。应用:dict/list 复制时防修改污染原数据(浅拷贝常用);嵌套结构需要完全独立时用深拷贝。判断用 a is b / a[0] is b[0] 验证。

8
# Python

Python 中 is 和 == 有什么区别?

== 比较值是否相等(调用 __eq__),is 比较身份(内存地址是否相同,即是否同一个对象)。a == b 为 True 不代表 a is b。小整数缓存(-5~256)和短字符串由于解释器驻留(intern),is 也可能为 True——这是实现细节,不应依赖。规范:与 None 比较用 is None(PEP 8 要求);数值比较用 ==;判断对象是否同一用 is。经典题:a = [1,2]; b = [1,2] → a ==…

9
# Python

Python 的 GIL 是什么?对多线程有什么影响

GIL(Global Interpreter Lock,全局解释器锁):CPython 解释器保证同一时刻只有一个线程执行 Python 字节码的互斥锁。影响:① 多线程无法利用多核并行执行 CPU 密集型任务(串行);② IO 密集型任务(网络、文件)多线程仍有效(阻塞时释放 GIL);③ 影响范围是 CPython 官方实现,PyPy 等无 GIL 或 Jython 无。绕过方案:多进程、C 扩展(如 numpy 释放 GIL)、a…

10
# Python

Python 有哪些核心特点?为什么成为 AI 与数据科学的主流语言

核心特点:① 解释型、动态类型、语法简洁(可读性优先);② 胶水语言,易于与其他语言集成;③ 生态庞大:AI/数据(NumPy、Pandas、PyTorch)、Web(Django、Flask)、自动化;④ 跨平台、免费开源;⑤ 支持多种编程范式(面向对象、函数式)。成为 AI 主流的原因:成熟的科学计算生态、社区与论文配套代码多用 Python、上手快适合快速迭代研究。缺点:执行速度慢(可优化)、GIL 限制多线程、移动端弱。