Python函数的参数默认值是从另一个模块导入的

标签 python function default-value anti-patterns

让我们考虑以下示例:

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/

相关文章:

c# - 不为 double 使用默认值

java - JSF 2 - 在 <? 上隐藏默认值扩展号码>

python - 使用Python更改桌面背景

python - Flask 脚本 windows 子进程和 sys

python - 如何使用 Paramiko 指定端口号

database - 是否可以在 PostgreSQL 中创建一个以列名作为输入的函数?

parameters - 在 Visual Basic VB.Net 2010 中使用 System.DateTime 类型作为可选参数

python - 将代码放置在 Apache 和 Django 的文档根问题之外

c++ - C++ 中的这个绑定(bind)发生了什么?

python - 从同一目录中的所有模块导入并调用相同的函数