简体   繁体   中英

Passing a function argument through another function in Python

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?

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')

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)
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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM