Почему фреймворки Python возвращают словари от контроллеров?

StackOverflow https://stackoverflow.com/questions/634024

  •  10-07-2019
  •  | 
  •  

Вопрос

Почему (например, web2py) вы возвращаете данные из контроллера в словаре вместо переменных (см. Rails)?

Например:

return dict(sape=4139, guido=4127, jack=4098)

вместо (именно так Rails делает это)

@var1 = "jello" 
@var2 = "hihi"

Есть ли преимущество в использовании словарей по сравнению с простыми переменными (по скорости / по коду)?

Обновление: вышеприведенный способ на самом деле является правильным способом создания словаря (по крайней мере, в Python 2.6.1). Другой способ (многие говорят, что он правильный)

return {"var1": "jello", "var2": "hihi"} 

не очень часто используется фреймворками Python.

Из документации Python : " Когда ключи являются простыми строками, иногда проще указать пары с помощью аргументов ключевого слова: "

dict(sape=4139, guido=4127, jack=4098)
Это было полезно?

Решение

Основным преимуществом является то, что в Python это единственный способ вернуть a) более одного значения и b) присвоить этому значению имя. Другими вариантами будет использование класса (дополнительный код), возврат кортежа (без имен, поэтому вам придется использовать индексы для доступа к значениям) или разрешение возвращать только одно значение, что, вероятно, будет означать, что все будут возвращать словарь, так как это самое простое решение.

Это также позволяет обернуть несколько методов и объединить / объединить их результаты. Наконец, он позволяет легко возвращать различные наборы пар значение / имя для каждого вызова, например, опускать необязательные значения или возвращать дополнительные подсказки.

Другие советы

Вы можете использовать локальные переменные, если хотите:

def hello():
    var1 = "whatever you like"
    var2 = "another value"
    return locals() # or vars()

<код> hello.html :

<html><body>
 <p>var1 {{=var1}}</p>
 <p>var2 {{=var2}}</p>
</body></html>

из PHP в web2py :

  

В web2py HTTP-запрос для   & Quot; / приложение / C / F & Quot; отображается в вызове   функция f () в файле (контроллере)   c.py в приложении "приложение".   Файл c.py написан на Python.   Вывод функции f () может быть   строка (в этом случае она возвращается),   или набор переменных (реализован как   словарь питона). В последнем   В случае, если переменные отображаются в   HTML с помощью файла c / f.html, называемого   вид.

Приятно то, что шаблонизатор, такой как Jinja2, одинаково обрабатывает объект и dict, поэтому если:

d = {'color': 'red'}
o = Color(red)

тогда все они работают в синтаксисе шаблона:

d.color d['color'] o.color o['color']
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top