我最近不得不使用一个函数,该函数有条件地将任务分派给其他函数,并带有许多强制性和可选命名参数(例如,操作连接字符串,spark连接器配置等),我想到这本来是非常“干净”(或“ pythonesque”)具有某种语法,使我可以将每个参数从一个函数传递给另一个与此类似的参数:
def sisterFunction(**kwargs) : # Doing things with a bunch of mandatory and optional args
<do various things/>
def motherFunction(a,b,**kwargs) :
<do various things/>
sisterFunction(**allArgs)
其中allArgs将是一个包含键a,b和所有内容的字典。这听起来像python倾向于允许和简化的事情,但是我似乎找不到与实现的“超级kwargs”类似的东西。有没有简单的方法可以做到这一点?有什么明显的理由不是吗?
答案 0 :(得分:1)
def sisterFunction(**kwargs):
pass
def motherFunction(a, b, **kwargs):
sisterFunction(a=a, b=b, **kwargs)
kwargs
中的 sisterFunction
将包含具有相应值的a
和b
键。
更新
如果您不想通过a=a
传递一长串的函数参数,则有一些变通方法可以获取allArgs
:
def motherFunction(a, b, **kwargs):
allArgs = locals().copy()
allArgs.update(allArgs.pop('kwargs', {}))
sisterFunction(**allArgs)
答案 1 :(得分:0)
我可能只使用kwargs
def sisterFunction(**kwargs):
pass
def motherFunction(**kwargs):
# use the values directly from 'kwargs'
print(kwargs['a'])
# or assign them to local variables for this function
b = kwargs['b']
sisterFunction(**kwargs)
这可能是函数签名(函数所有参数的定义)中代码最少的选项。
如果未将某些参数传递给该函数并且该函数尝试使用它们,则会引发KeyError
。