Python如何用导入方法实现参数动态默认值且避免导入时执行
问题原因
Python的函数参数默认值是在函数定义阶段(也就是模块被导入、解释器第一次解析到def语句的时候)就完成计算并绑定的,并不会在每次函数调用时重新生成。你在定义getAge时写的today=toDayDate(),会在导入helper模块的瞬间直接执行一次toDayDate(),把返回值固定为today参数的默认值,后续调用不传参的话永远会使用这个初始值,不会动态更新。
解决方案
规范的处理方式是把需要动态生成默认值的参数默认设置为None,在函数内部执行时再做初始化计算,修改后的Helper.py代码如下:
def toDayDate(): return Now() def getAge(dob, today=None): # 仅在调用时未传参的场景下动态获取最新日期 if today is None: today = toDayDate() doMagic()
你原有调用侧的代码不需要做任何改动,依旧可以正常使用:
from helper import getAge input=getDOBfromUSER() getAge(input)
该方案同样适用于其他需要动态生成的默认值场景(比如空列表、字典这类可变默认参数的经典坑),都可以用None作为占位符在函数内部完成初始化。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

