Python Обрабатывает несколько условий If Внутри инструкции Return

#javascript #return-value #python-3.7 #return-type

#язык JavaScript #возвращаемое значение #python-3.7 #возвращаемый тип

Вопрос:

Я работаю над переводом некоторого кода с JavaScript на Python.

В Javascript я вижу много обработки множества условий внутри оператора return. Вот пример:

 return '('    Object.entries(query).map((kv) =gt; {  const key = getCols(kv[0], table)  if (kv[0] === '$or') {  return '('   getQuery(kv[1], table).join(' OR ')   ')'  } else if (kv[0] === '$null') {  return format('%s IS NULL', kv[1])  } else if (kv[0] === '$notnull') {  return format('%s IS NOT NULL', kv[1])  } else if (kv[0] === '$not') {  return 'NOT ('   getQuery(kv[1], table)   ')'  } else if (kv[0] === '$arrayany') {  return Object.entries(kv[1])  .map((x) =gt; {  return format('%s=ANY(%L)', getCols(x[0], table), value(x[1]))  })  .join(' AND ')    ')'  

Я не видел таких сложных операторов возврата в Python и не уверен, как построить эквивалентный оператор с учетом всех отображений и соединений. Каков действительный питонский способ иметь такие глубоко вложенные операторы возврата?

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

1. Как вы представляете объекты, как query в python? Это простые dict буквы «с»?

2. В общем: Object.entries(obj) -gt; obj.items() , arr.join(string) -gt; string.join(arr) , arr.map(cb) -gt; map(cb, arr) это должно решить 90% конверсии. Предполагая, что вы преобразуете объекты JavaScript в python dict s. Также: format(template, val1, val2, ...) -gt; template.format(val1, val2, ...) но замените %lt;Xgt; на {} .

3. Спасибо! И что касается операторов возврата — часто ли в Python используются такие глубоко вложенные операторы возврата? Я могу перевести каждый из битов самостоятельно, но объединение всего этого в оператор возврата, подобный Javascript, создает множество unreachable code ошибок.

4. ИМХО, этот код был бы более читабельным, разделенным на пару функций… Код должен выглядеть примерно так: return '(' format_query(query, table) ')' и format_query я ожидал бы , что это будет что-то вроде ' AND '.join(format_query_part(key, value) for key, value in query.items()) , с format_query_part тем, что содержит последовательность if/elif/else s.

5. Спасибо за это. Я собираюсь попробовать поработать с этой идеей.