Python3重复调用函数判空是否高效?最优实现方式咨询
关于Python中重复调用函数的效率问题
先直接给你明确答案:是的,Python解释器会两次执行request_link(requested_domain, requested_link)这个函数。因为if判断里是第一次调用,赋值语句里是第二次调用,这是两个完全独立的函数执行操作——如果这个函数是耗时的(比如发起网络请求、做大量计算),那这种写法的效率问题会非常明显。
这种写法显然低效,重复调用不仅会让执行时间直接翻倍,还可能带来额外的资源浪费(比如重复建立网络连接、重复读取文件等)。
更优的处理方式
核心思路就是只调用一次函数,把结果存到变量里,再基于变量做判断和处理,具体有两种常用写法:
写法一:先赋值再判断(兼容性好,适合所有Python3版本)
# 先调用一次函数,把结果存起来 link_result = request_link(requested_domain, requested_link) # 对保存的结果做判断 if link_result is not None: domain_res, link_res, r_res = link_result parse_results(domain_res, r_res)
写法二:用赋值表达式(Python3.8+支持,代码更紧凑)
如果你的Python版本在3.8及以上,可以用海象运算符:=把赋值和判断合并成一行,同样只调用一次函数:
# 调用函数并赋值,同时判断结果是否非None if (link_result := request_link(requested_domain, requested_link)) is not None: domain_res, link_res, r_res = link_result parse_results(domain_res, r_res)
额外提醒
如果request_link是你自己实现的函数,建议确保它的返回值格式稳定(比如确定返回None或者三元组),这样解构赋值的时候不会出错。另外,对于任何耗时的函数,都要避免无意义的重复调用,这是Python性能优化里最基础的原则之一。
内容的提问来源于stack exchange,提问作者michuhu
相关产品推荐
相关产品推荐

