Reputation: 265
When giving a string-parameter to a function which i want to use as an argument inside the function for another function:
def function(classifier, classifier_argument, list_of_parameters):
classifier(classifier_argument=list_of_parameter[0])
classifier = someClassifier()
classifier_argument = 'someArgument'
list_of_parameters = [0,1,2,3,4,5]
func(classifier,classifier_argument,list_of_parameters)
It gives me this error:
TypeError: 'classifier_argument' is an invalid keyword argument for this function
So I know I can't pass it as a simple string, so my question is:
How can i pass it?
Upvotes: 0
Views: 558
Reputation: 955
def function(classifier, classifier_argument, list_of_parameters):
args = {classifier_argument:list_of_parameters}
classifier(**args)
classifier = someClassifier # Note - you need to reference the function itself, not call it!
classifier_argument = 'someArgument'
list_of_parameters = [0,1,2,3,4,5]
function(classifier,classifier_argument,list_of_parameters)
A couple of points here: you have to unpack the arguments list, and you need to pass in the classsifier function without calling it.
Upvotes: 0
Reputation: 3051
In my guess, you are trying to achieve your classifier creation class to be initiated with different attributes as follows ? You can create class attributes dynamically on you __init__
method and use **kwargs
to send the required data.
class someClassifier(object):
def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
print('setting classifier attribute', k, v)
def function(classifier, **kwargs):
classifier(**kwargs)
classifier = someClassifier
list_of_parameters = [0, 1, 2, 3, 4, 5]
classifier_argument = {
'someArgument': list_of_parameters
}
function(classifier, **classifier_argument)
Upvotes: 2
Reputation: 31564
You could use **
when call function:
def function(classifier, classifier_argument, list_of_parameters):
paras = {classifier_argument: list_of_parameter[0]}
classifier(**paras)
classifier = someClassifier()
classifier_argument = 'someArgument'
list_of_parameters = [0,1,2,3,4,5]
func(classifier,classifier_argument,list_of_parameters)
A more simple workable example for your quick test:
def fun1(b):
print(b)
def fun(a):
paras = {a: 2}
fun1(**paras)
fun('b')
Upvotes: 0