传递默认参数为嵌套函数蟒蛇
我有一个函数传递默认参数为嵌套函数蟒蛇
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
2个用途是从上下文不同?
要直接回答您的问题:是的,Python足够聪明,不会混淆局部变量和出站函数参数的相同名称。例如:
def x(a):
...
def y(a, b):
return x(a=a)
在返回管线中,右手a
是从传递到功能y
和左手a
参数局部变量是起作用x
参数。
被调用函数的参数名称位于被调用函数参数列表的名称空间中,该名称空间与调用上下文的局部变量和全局变量无关。
好 - 我可能应该只是测试过它,但很高兴知道,谢谢 –
我看到你是一个新的StackOverflow用户,一个提示 - 一旦你决定哪个答案对你最有帮助,使用复选标记接受这个答案。 –
这两个答案都很好,但这是直接的答案。另外,谢谢 –
您可以避免重新定义函数中的所有参数,只需使用**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
注意,因为y
是外kwargs
,路过y
作为关键字也有效。
唯一的缺点是你不知道什么可以实际传递给bar
,但它是合乎逻辑的,因为它取决于foo
接受的内容。通过向你的函数添加一个文档字符串来做到这一点。
只是'酒吧(y,** kwargs)'然后'foo(x,** kwargs)'我猜 –
** kwargs看起来像很好地做到这一点。谢谢! –