You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CPython是否优化常量集合创建?函数内固定集合需提前初始化吗?

问题解答

你问的这个场景其实挺常见的——频繁调用的函数里包含固定常量集合的创建,要不要手动把它移到函数外部,能不能指望CPython自动优化。直接给你结论:你应该手动把drop_chars的创建逻辑移到函数外部,CPython并不会自动帮你完成这个优化。

具体来说:

  • 每次调用strip_by_category函数时,函数体里的代码都会从头执行一遍,set("abcdefg")这个语句每次都会生成一个全新的集合对象。哪怕这个集合的内容完全固定,CPython的字节码编译器也不会把这个创建操作提升到函数初始化阶段,频繁调用的话就会重复做无意义的集合创建工作。
  • drop_chars定义到函数外部之后,它只会在模块加载时初始化一次,后续所有函数调用都会直接复用这个已经创建好的集合。虽然你说不追求微优化,但从代码逻辑合理性来说,固定不变的常量本来就应该只初始化一次,这样的写法也更清晰。

另外你提到这个示例只是用来展示常量集合的占位,实际会用str.translate——这点完全没问题,我们聚焦在核心问题上:哪怕是最新版本的Python,也没有针对这种函数内固定常量集合的自动优化机制,手动移到外部是更稳妥、更合理的选择。

内容的提问来源于stack exchange,提问作者alexis

火山引擎 最新活动