You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用函数无需返回值时,_接收与直接调用哪种更Pythonic?

Python忽略函数返回值的最佳写法分析

结论

第三种写法更优,也更符合Pythonic规范,优先选择直接调用不接收返回值的写法。

具体原因

1. 内存消耗差异明确

Python采用引用计数为主的垃圾回收机制:

  • 直接调用不接收返回值时,函数返回的Owner对象没有被任何变量绑定,引用计数会在调用结束后立刻减1,只要没有其他地方持有该对象的引用,会被立刻回收(CPython下引用计数归0即时释放内存),完全没有额外内存消耗。
  • 用_接收返回值时,_作为当前作用域的有效变量,会持续持有Owner对象的引用,直到作用域结束才会释放,确实会产生不必要的内存占用,当Owner对象体积较大、或者调用发生在长生命周期作用域(比如全局作用域、常驻服务的循环内)时,差异会更明显。

2. IDE告警的误解澄清

第一种写法的告警根源是「声明了变量但后续未使用」,而非「没有处理返回值」:

  • 第三种写法没有创建任何无用变量,绝大多数IDE和静态检查工具(Pylint、flake8等)默认不会触发告警。
  • 只有开启了「强制要求所有返回值必须被显式处理」的严格规则时,才会触发提示,这种场景只需添加对应规则的忽略注释即可(比如flake8加# noqa: R501,具体根据你用的检查工具调整),远比重构无用变量绑定更合理。

3. 语义符合Python约定

_在Python中有明确的约定俗成使用场景:

  • 作为国际化翻译函数的常用别名(比如gettext场景下的_("提示文本"))
  • 交互式解释器中存储上一个表达式的返回值
  • 解包操作中明确要丢弃的多余值(比如a, _, b = (1,2,3))

只有当你必须接收返回值才能满足语法要求时,用_标识丢弃才是合理的,当前场景不需要接收返回值,直接调用更能清晰表达你的意图:我只关心函数执行的副作用(车牌不存在时抛出异常),完全不需要使用返回值。

开发建议

  • 日常开发优先选第三种写法,语义清晰且无额外开销。
  • 仅当团队的静态检查规则强制要求所有返回值必须被显式接收时,再使用第二种写法,同时建议加注释说明你是故意忽略返回值的。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:54:00