代码之家  ›  专栏  ›  技术社区  ›  Vincent Chalmel

获取当前函数参数的字典

  •  1
  • Vincent Chalmel  · 技术社区  · 7 年前

    最近,我不得不使用一个函数,有条件地将任务分派给其他函数,其中包含许多强制性和可选的命名参数(例如,操纵连接字符串、spark connectors Config等),我突然想到,如果有一个语法,允许我将每个参数从一个函数传递到另一个函数,那就真的“更干净”(或“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和kwargs中的所有内容。这听起来像是python倾向于允许和简化的东西,但我似乎找不到类似于实现“super kwargs”的东西。有没有一种简单的方法可以做到这一点?有没有明显的好理由证明这不是一件事?

    3 回复  |  直到 7 年前
        1
  •  1
  •   sanyassh Khushboo Tahir    7 年前
    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)
    
        2
  •  0
  •   Ralf    7 年前

    我可能只会使用 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)
    

    这可能是函数签名中代码最少的选项(函数所有参数的定义)。

    A. KeyError 如果某些参数未传递给函数且函数尝试使用它们,则将引发。