Почему фреймворки Python возвращают словари от контроллеров?
-
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>
В 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']