如何在不知道多参数函数名称的情况下给出参数?python

如何在不知道多参数函数名称的情况下给出参数?python,python,function,arguments,keyword-argument,Python,Function,Arguments,Keyword Argument,嗨,我有一个多参数函数,其中kwargs中只缺少一个参数,我希望能够输入缺少的参数,而不知道它是什么参数: def function(a,b,c): #multiparameter function print('a=',a) print('b=',b) print('c=',c) kwargs={'a':1,'b':2} #only the value for c is missing 如果我跑 函数(3,**kwargs)它解释a=3但我希望它解释c

嗨,我有一个多参数函数,其中kwargs中只缺少一个参数,我希望能够输入缺少的参数,而不知道它是什么参数:

def function(a,b,c):    #multiparameter function
    print('a=',a)
    print('b=',b)
    print('c=',c)

kwargs={'a':1,'b':2}    #only the value for c is missing

如果我跑
函数(3,**kwargs)
它解释
a=3
但我希望它解释
c=3

或者,我可以找到缺少的变量的名称,但无法将其正确地输入函数。我试着做:

variable='c'

function(variable=3,**kwargs)

但是它返回错误
function()得到了一个意外的关键字参数“variable”
首先,您可能应该阅读

您可以使用
*
将参数强制为关键字参数,并且每个关键字参数都可以有一个默认的sentinel值来帮助您发现它

def function(*,a = None,b = None,c = None)
    print('a=',a)
    print('b=',b)
    print('c=',c)
如果您想即时输入某些内容,可以执行以下操作:

def function(input, *,a = None,b = None,c = None)
    print('a=',a or input)
    print('b=',b or input)
    print('c=',c or input)

如果无法修改
函数的定义
,可以使用
functools.partial
将其包装

from functools import partial

def function(a,b,c):    #multiparameter function
    print('a=',a)
    print('b=',b)
    print('c=',c)

function_caller = partial(function, 1, 2, 3)
现在,
function\u caller
的任何关键字参数都将覆盖调用
partial
时指定的值:

function_caller()  # function(1,2,3)
function_caller(a=5, b=4) # function(5, 4, 3)
kwargs = {'a': 5, 'b': 4}
function_caller(**kwargs)  # Same as previous call
如果有包含参数名称的
变量
,则可以轻松地将其添加到
kwargs
,但不能将其直接用作关键字参数

variable = 'c'
kwargs = {'a': 5, 'b': 4, variable: 3}  # {'a': 5, 'b': 4, 'c': 3}

函数\u调用方不接受任何位置参数。

如果可以将参数作为变量,则此请求:

如果只将变量添加到kwargs字典中,则可以工作:

kwargs[variable] = 3
function(**kwargs)

在没有外部库的情况下,有没有办法做到这一点?
functools
是标准库的一部分;它已经安装,所以使用它确实没有缺点。您可以提供一个变量作为
kwargs
dict的键。例如,
variable='c';kwargs={'a':1,'b':2,变量:3}
。请记住,排序很重要:如果
变量='a'
,那么
a
将获得值
3
,而不是
1
,并且
c
仍然未指定。我想一次运行函数,类似于以下内容:np.array([function(c=3,**kwargs),function(c=4,**kwargs)我想做的是快速运行函数多次,而不必以类似的方式更改kwargs:np.array([function(variable=3,**kwargs)、function(variable=4,**kwargs)、function(variable=5,**kwargs)])
kwargs[variable] = 3
function(**kwargs)