лямбда-способ присвоения значения

#python #lambda

Вопрос:

В моем коде на python я хочу присвоить значение «name» значению «request_body» на основе входных данных, что-то вроде:

 def make_api_call(context, name, ...):
    api_name = f"<my_API_Call_URL_here>"
    request_body= {}
    request_body["name"] = lambda name:  "" if name == "BLANK" else name
    ...
    context.base.execution_call(context, api_name, request_body, "post")

    
 

Это правильный способ в лямбде присвоить строковое значение request_body[«name»] ?

Каким-то образом, когда я в конце вызываю api, я получаю такое сообщение об ошибке:

 TypeError: Object of type function is not JSON serializable
 

Комментарии:

1. Лямбда вообще не нужна. Просто используйте request_body["name"] = "" if name == "BLANK" else name

2. По сути, вы присваиваете name ключу функцию, а не значение. Как упоминалось ранее, в этом lambda нет необходимости.

3. да, я могу использовать для этого способ If / else, но я просто хочу, чтобы код выглядел аккуратно.

4. @user3595231, что значит выглядит аккуратно? Он не делает того, что вы собираетесь делать.

5. Python — это не ‘выглядит аккуратно’. Речь идет о понятном и кратком коде, который легко читается и эффективен.

Ответ №1:

лямбда — это альтернативный способ создания небольшой функции, и в вашем случае в этом нет необходимости. Вы должны использовать что-то вроде:

 request_body["name"] = "" if name == "BLANK" else name
 

Вы не можете использовать лямбду для «присвоения значения», не вызывая его:

 >>> a = lambda name: "" if name == "BLANK" else name
>>> type(a)
<class 'function'>
 

Комментарии:

1. Я не уверен, что вы хотите сказать, что вы не можете использовать лямбда-выражение для «присвоения значения» , потому что я могу четко «использовать лямбда-выражение для присвоения значения», вызвав его.

2. Да, достаточно справедливо

Ответ №2:

если вы хотите, чтобы ваша лямбда была настолько плохой, попробуйте это

 test_name = lambda x:  "" if x == "BLANK" else x
request_body["name"] = test_name(name)