gpt4 book ai didi

python - 避免在 Python 的默认参数中重复代码

转载 作者:太空狗 更新时间:2023-10-29 16:55:45 24 4
gpt4 key购买 nike

考虑一个带有默认参数的典型函数:

def f(accuracy=1e-3, nstep=10):
...

这是紧凑且易于理解的。但是,如果我们有另一个函数 g 将调用 f,并且我们想将 g 的一些参数传递给 f?一种自然的做法是:

def g(accuracy=1e-3, nstep=10):
f(accuracy, nstep)
...

这种处理方式的问题是可选参数的默认值会重复。通常在像这样传播默认参数时,人们希望上层函数 (g) 与下层函数 (f) 具有相同的默认值,因此任何时候默认值都会发生变化在 f 中,需要遍历调用它的所有函数并更新它们将传播到 f 的任何参数的默认值。

另一种方法是使用占位符参数,并在函数内填充它的值:

def f(accuracy=None, nstep=None):
if accuracy is None: accuracy = 1e-3
if nstep is None: nstep=10
...
def g(accuracy=None, nstep=None):
f(accuracy, nstep)
...

现在调用函数不需要知道 f 的默认值是什么。但是 f 接口(interface)现在有点麻烦,而且不太清晰。这是没有显式默认参数支持的语言中的典型方法,例如 fortran 或 javascript。但是,如果在 Python 中以这种方式执行所有操作,就会丢弃该语言的大部分默认参数支持。

有没有比这两个更好的方法?执行此操作的标准 pythonic 方法是什么?

最佳答案

定义全局常量:

ACCURACY = 1e-3
NSTEP = 10

def f(accuracy=ACCURACY, nstep=NSTEP):
...

def g(accuracy=ACCURACY, nstep=NSTEP):
f(accuracy, nstep)

如果 fg 定义在不同的模块中,那么您也可以创建一个 constants.py 模块:

ACCURACY = 1e-3
NSTEP = 10

然后定义f:

from constants import ACCURACY, NSTEP
def f(accuracy=ACCURACY, nstep=NSTEP):
...

g 也类似。

关于python - 避免在 Python 的默认参数中重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com