2024-05-16 18:33:54 发布
网友
让我们考虑以下示例:
import module def function(param=module.value): pass
将函数参数的默认值设置为从另一个模块导入的标识符是否是一个好做法?我知道这是可行的,但我更关心的是干净的代码方法和可能的问题。我在这里看到了一个潜在的漏洞:从module导入的变量的值在下一个版本中可能是可变的。你觉得怎么样?在
module
我建议将默认值设置为None,然后在代码中进行编程测试:
None
import module def function(param = None): if param is None: param = module.value
可能是直接赋值(只是复制引用)是不合适的。在
例如,您提到对象的类可以在不同版本之间从不可变更改为可变。如果出现这种情况,则可能需要使用^{}而不是赋值。在
但是,并不是所有的类都有自己的__deepcopy__(),因此复制对象可能会有问题。可能是应该使用原始对象中的值创建一个新对象。在不知道对象的类和要用param做什么的情况下,很难说应该使用什么。在
__deepcopy__()
param
您可以为您的目的编写wrapper。如果库更改或弃用值,您仍然可以获得相同的值。在
只需编写一个简单的包装器moduleWrapper
moduleWrapper
def getValue(): try: return module.value except: return None
或者,您可以设置您想要的默认值,然后可以将此函数设置为param。在
这样,如果模块改变了,你仍然可以让你的代码工作。在
我建议将默认值设置为
None
,然后在代码中进行编程测试:可能是直接赋值(只是复制引用)是不合适的。在
例如,您提到对象的类可以在不同版本之间从不可变更改为可变。如果出现这种情况,则可能需要使用^{} 而不是赋值。在
但是,并不是所有的类都有自己的
__deepcopy__()
,因此复制对象可能会有问题。可能是应该使用原始对象中的值创建一个新对象。在不知道对象的类和要用param
做什么的情况下,很难说应该使用什么。在您可以为您的目的编写wrapper。如果库更改或弃用值,您仍然可以获得相同的值。在
只需编写一个简单的包装器
moduleWrapper
或者,您可以设置您想要的默认值,然后可以将此函数设置为param。在
^{pr2}$这样,如果模块改变了,你仍然可以让你的代码工作。在
相关问题 更多 >
编程相关推荐