python - 是否可以将相同的可选参数传递给多个函数?

标签 python python-3.x function optional-arguments

我想问是否有办法在将相同的参数传递给函数的可选参数时防止不必要的代码重复。

希望以下示例能够很好地说明我正在尝试做的事情:

def f(arg1):
    def g(optional_1=0, optional_2=0, optional_3=0):
        return arg1+optional_1+optional_2+optional_3
    return g

b, c = 2, 3
f1 = f(1)
f2 = f(2)
calc_f1 = f1(optional_2=b, optional_3=c)
calc_f2 = f2(optional_2=b, optional_3=c)

如您所见,f1 和 f2 仅在传递给 f 的 arg1 上有所不同,之后我使用相同的变量和相同的可选参数来调用它们。 当代码很短时还好,但是当我有超过 10 个可选参数时,代码就会变得不必要的长和冗余。 是否可以做类似的事情

optional_variable_pair = #some way to combine them
calc_f1 = f1(optional_variable_pair)
calc_f2 = f2(optional_variable_pair)

这样我就可以得到更简洁且易于阅读的代码?

最佳答案

任何具有多个可选参数的函数都有点难闻,因为:

  1. 您会得到如此多的参数组合,需要进行大量测试。
  2. 由于存在所有选项,该函数必须具有大量条件和路由,这会增加其圈复杂度。

您可以应用重构将整个参数列表提取到一个对象中,并让函数在该对象上工作。如果您能找到一个统一的名称来描述您的参数列表并适合您在函数周围使用的任何隐喻,那么这非常有效。您甚至可以反转调用,使函数成为对象的方法,从而获得一些封装。

关于python - 是否可以将相同的可选参数传递给多个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46739019/

相关文章:

python - 使用 pip 和 requirements.txt 在弹性 beanstalk 上安装 scikit-learn 和 scipy

python - 为什么它有效?

python - 将输出序列化为 JSON - ValueError : Circular reference detected

python - pip安装m2crypto错误

function - Julia -如何将kwargs从函数传递到宏

java - 在封闭函数中处理未处理的检查异常

python - 找到运行总和产生的最大值的优雅方法是什么?

python-3.x - Python 参数化格式化

python - 在类中,来自一种方法的变量在一秒钟内使用?

swift - 根据参数调用不同的函数