Почему фреймворки Python возвращают словари от контроллеров? - PullRequest
2 голосов
/ 11 марта 2009

Почему (например, 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)

Ответы [ 3 ]

5 голосов
/ 11 марта 2009

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

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

3 голосов
/ 11 марта 2009

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

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-запрос для «/ app / c / f» отображается в вызов функция f () в файле (контроллере) c.py в приложении "приложение". Файл c.py написан на Python. Вывод функции f () может быть строка (в этом случае она возвращается), или набор переменных (реализован как словарь питона). В последнем В случае, если переменные отображаются в HTML с помощью файла c / f.html, называемого вид.

0 голосов
/ 11 марта 2009

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

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

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

d.color d['color'] o.color o['color']
...