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