Передача аргумента функции через другую функцию в Python - PullRequest
0 голосов
/ 05 июля 2018

При передаче строкового параметра функции, которую я хочу использовать в качестве аргумента внутри функции для другой функции:

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)

Это дает мне эту ошибку:

TypeError: 'classifier_argument' является недопустимым аргументом ключевого слова для этой функции

Итак, я знаю, что не могу передать это как простую строку, поэтому мой вопрос:

Как мне пройти?

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

По-моему, вы пытаетесь добиться, чтобы ваш класс создания классификатора был инициирован с другими атрибутами следующим образом? Вы можете динамически создавать атрибуты класса для вашего метода __init__ и использовать **kwargs для отправки необходимых данных.

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)
0 голосов
/ 05 июля 2018
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)

Пара моментов: вам нужно распаковать список аргументов и передать функцию classsifier, не вызывая ее.

0 голосов
/ 05 июля 2018

Вы можете использовать ** при вызове функции:

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)

Более простой работоспособный пример для вашего быстрого теста:

def fun1(b):
    print(b)

def fun(a):
    paras = {a: 2}
    fun1(**paras)

fun('b')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...