让我们考虑以下示例:
import module
def function(param=module.value):
pass
将函数参数的默认值设置为从另一个模块导入的标识符是一个好习惯吗?我知道它有效,但我想问的是干净的代码方法和可能的问题。我可以在这里看到一个潜在的漏洞:从 module
导入的变量的值在下一个版本中可能是可变的。您对此有何看法?
最佳答案
我建议将默认值设置为None
,然后以编程方式在您的代码中进行测试:
import module
def function(param = None):
if param is None:
param = module.value
直接赋值(仅复制引用)可能不合适。
例如,您提到对象类可以在版本之间从不可变更改为可变。如果发生这种情况,那么您可能需要使用 copy.deepcopy()
而不是作业。
但是,并非所有类都有自己的 __deepcopy__()
,因此复制对象可能会出现问题。可能应该使用原始对象的值创建一个新对象。如果不知道对象的类以及要使用 param
做什么,很难说应该使用什么。
关于Python函数的参数默认值是从另一个模块导入的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173432/