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
相关产品推荐
相关产品推荐

