python - 将默认参数传递给嵌套函数python

标签 python nested parameter-passing default

我有一个函数

foo(x, setting1=def1, settings2=def2)

(实际上这是一个带有一堆默认参数的第三方库函数,我只需要在外部设置 1 个,但为了示例..)

我是从这里调用的

bar(y, settings2_in=def2)
   x = get_x(y)
   foo(x, settings2=settings2_in)

这没问题,但在风格上我宁愿将参数命名为 settings2_in settings2。当我继续向下传递另一层时,我将不得不不断重命名参数,而且它变得很难看。

bletch(z, settings2_in_2=def2)
   y = get_y(z)
   bar(y, settings2_in=settings_in_2)

是否有一种“不错的”/Pythonic 方式以这种方式将默认参数的子集传递到多层函数中?

如果我这样做,Python 是否足够聪明来解决这个问题:

bar(y, settings2=def2)
   x = get_x(y)
   foo(x, settings2=settings2)

settings2 的两种用法与上下文不同?

最佳答案

您可以避免重新定义函数中的所有参数,只需使用 **kwargs 来捕获所有关键字参数。

然后将关键字参数传递给您的foo 函数

def foo(x, setting1="def1", settings2="def2"):
    print(setting1,settings2)


def bar(y,**kwargs):
    foo(y,**kwargs)

bar(12)
bar(y=12)
bar(12,setting1="other")

结果:

def1 def2
def1 def2
other def2

请注意,由于 ykwargs 之外,因此将 y 作为关键字传递也是可行的。

唯一的缺点是您不知道可以实际传递给 bar 的内容,但这是合乎逻辑的,因为它取决于 foo 接受的内容。通过向您的函数添加一个文档字符串来弥补这一点。

关于python - 将默认参数传递给嵌套函数python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253577/

相关文章:

c++ - 读取文件缓冲区传递

c - 更新嵌套 C 结构数组的正确方法是什么?

python - 在 Pandas 中合并数据后重命名列

Java 语句执行(变量更改除外)

function - Scala 风格 : how far to nest functions?

mysql查询以计算具有一定数量产品的客户

java - 使用 ProcessingJS 将返回值从一个函数传递到另一个函数的语法?

python - 形状外的距离。多边形

python - 更改配置并加载在下游任务上微调的 Hugging Face 模型

python - 下面的 LP 代码哪里出错了?