Pergunta

Por que (por exemplo web2py) você retorna dados de um controlador em um dicionário em vez de variáveis ​​(veja Rails)?

Por exemplo:

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

em vez de (é assim que o Rails faz)

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

Existe alguma vantagem em usar dicionários sobre variáveis ​​simples (em termos de velocidade/código)?

Atualizar:A forma acima é na verdade uma forma correta de criar um dicionário (pelo menos em Python 2.6.1).A outra maneira (que muitas pessoas dizem que é a correta)

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

não é muito usado por frameworks python.

De Documentação do Python:"Quando as chaves são strings simples, às vezes é mais fácil especificar pares usando argumentos de palavras-chave:"

dict(sape=4139, guido=4127, jack=4098)
Foi útil?

Solução

A principal vantagem é que esta é a única maneira em python de retornar a) mais de um único valor e b) dê um nome a esse valor.Outras opções seriam usar uma classe (código extra), retornar uma tupla (sem nomes, então você teria que usar índices para acessar os valores) ou permitir retornar apenas um único valor, o que provavelmente significaria que todos retornariam um dicionário, já que essa é a solução mais simples.

Também permite agrupar vários métodos e unir/mesclar seus resultados.Por último, permite retornar facilmente diferentes conjuntos de pares valor/nome para cada chamada, por exemplo, omitir valores opcionais ou retornar dicas adicionais.

Outras dicas

Você pode usar variáveis ​​locais se desejar:

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>

de PHP para web2py:

No Web2py, uma solicitação http para "/app/c/f" é mapeada em uma chamada para a função f () no arquivo (controlador) c.py no aplicativo "aplicativo".O arquivo C.Py está escrito em Python.A saída da função f () pode ser uma string (neste caso, é retornada) ou um conjunto de variáveis ​​(implementado como um dicionário Python).Neste último caso, as variáveis ​​são renderizadas em HTML por um arquivo c/f.html, chamado de visualização.

O bom é que um mecanismo de modelo como o Jinja2 trata um objeto e um dict de forma semelhante, então se:

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

então tudo isso funciona na sintaxe do modelo:

d.color d['color'] o.color o['color']
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top