获取当前函数参数的字典

时间:2019-03-16 10:24:19

标签: python function dictionary arguments

我最近不得不使用一个函数,该函数有条件地将任务分派给其他函数,并带有许多强制性和可选命名参数(例如,操作连接字符串,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”类似的东西。有没有简单的方法可以做到这一点?有什么明显的理由不是吗?

2 个答案:

答案 0 :(得分:1)

def sisterFunction(**kwargs):
    pass

def motherFunction(a, b, **kwargs):
    sisterFunction(a=a, b=b, **kwargs)
kwargs中的

sisterFunction将包含具有相应值的ab键。

更新

如果您不想通过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