将默认参数传递到嵌套函数python中

2024-10-02 10:28:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个功能

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

(实际上,这是一个第三方库函数,其中有一组默认参数,我只需要在外部设置1个参数,但为了示例起见…)

我是从

^{pr2}$

这没问题,但从风格上讲,我更愿意将参数命名为settings2_insettings2。当我继续向下传递另一个层时,我将不得不不断地重命名参数,它会变得很难看。在

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的两个用法与上下文不同吗?在


Tags: in功能示例参数getfoo风格bar
2条回答

直接回答您的问题:是的,Python非常聪明,不会混淆同名的本地变量和出站函数参数。示例:

def x(a):
    ...

def y(a, b):
    return x(a=a)

在返回行中,右边的a是传递给函数y的参数的局部变量,左边的{}是函数{}的参数。在

被调用函数的参数名位于被调用函数的参数列表的名称空间中,该名称与调用上下文的局部和全局变量无关。在

您可以避免重新定义函数中的所有参数,只需使用**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")

结果:

^{pr2}$

注意,由于ykwargs之外,所以将y作为关键字传递也可以。在

唯一的缺点是您不知道实际可以传递给bar的内容,但这是合乎逻辑的,因为它取决于foo接受什么。通过在函数中添加一个docstring来弥补这个问题。在

相关问题 更多 >

    热门问题