Необязательный аргумент в лямбда-функции

У меня есть функция:

cost(X, model, reg = 1e-3, sparse) 

И мне нужно передать эту функцию другой в форме:

 f(X, model) f(X, model, reg = reg) 

Я использую лямбда для этого:

 f = lambda X, model: cost(X, model, sparse = np.random.rand(10,10)) 

И питон жалуется, что лямбда получила неожиданный аргумент reg. Как это сделать правильно?

Если я сделаю другой путь:

 f = lambda X, model, reg: cost(X, model, reg = reg, sparse = np.random.rand(10,10)) 

Тогда это не работает в первом случае.

2 Solutions collect form web for “Необязательный аргумент в лямбда-функции”

Лямбда принимает ту же подпись, что и обычные функции, и вы можете дать reg по умолчанию:

 f = lambda X, model, reg=1e3: cost(X, model, reg=reg, sparse=np.random.rand(10,10)) 

То, что вы даете, зависит от того, что по умолчанию функция cost назначила этому параметру. Эти значения по умолчанию хранятся в этой функции в структуре cost.__defaults__ , соответствующей именам аргументов. Возможно, проще всего использовать inspect.getargspec() для интроспекции этой информации:

 from inspect import getargspec spec = getargspec(cost) cost_defaults = dict(zip(spec.args[-len(defaults:], spec.defaults)) f = lambda X, model, reg=cost_defaults['reg']: cost(X, model, reg=reg, sparse=np.random.rand(10,10)) 

Кроме того, вы можете просто передать любой дополнительный аргумент ключевого слова:

 f = lambda X, model, **kw: cost(X, model, sparse=np.random.rand(10,10), **kw) 

вы пробовали что-то вроде

f = lambda X, model, **kw: cost(X, model, sparse = np.random.rand(10,10), **kw)

то reg (и любой другой именованный аргумент, который вы хотите пройти (кроме разреженного)), должен работать нормально.

  • Связывание Python lambda с локальными значениями
  • лямбда и понимание по спискам
  • Фильтрация столбцов в PySpark
  • Python Только для чтения файловая система Ошибка с S3 и Lambda при открытии файла для чтения
  • AWS Python Lambda с Oracle
  • Объясните совокупную функциональность в Spark
  • Зачем использовать лямбда-функции?
  • команды в tkinter, когда использовать лямбда и обратные вызовы
  • Python - лучший язык программирования в мире.