Passing more kwargs into a function than initially set

一个人想着一个人 提交于 2019-11-29 06:55:20

To clarify Martijn Pieters's answer (for sake of clarity). It's possible if you change the function signature to:

def mydef(a, b, **kwargs):

This means it's not possible without changing the signature. But if that's not a problem it'll work.

No, unless the function definition allows for more parameters (using the **kwargs catch-all syntax), you cannot call a method with more arguments than it has defined.

You can introspect the function and remove any arguments it won't accept however:

import inspect

mybigdict = {'a2' : 'foo', 'b2' : 'bar', 'c2' : 'nooooo!'}
argspec = inspect.getargspec(mydef)
if not argspec.keywords:
    for key in mybigdict.keys():
        if key not in argspec.args:
            del mybigdict[key]
mydef(**mybigdict)

I'm using the inspect.getargspec() function to check if the callable supports a **kwarg catch-all via .keywords, and if it doesn't, I use the .args information to remove anything the method won't support.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!