Pregunta

¿Por qué (por ejemplo, web2py) devuelve datos de un controlador en un diccionario en lugar de variables (vea Rails)?

Por ejemplo:

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

en lugar de (así es como lo hace Rails)

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

¿Existe alguna ventaja al usar diccionarios sobre las variables simples (speed-wise / code-wise)?

Actualización: la forma anterior es en realidad una forma correcta de crear un diccionario (al menos en Python 2.6.1). La otra forma (que mucha gente dice que es la correcta)

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

no se usa mucho en los marcos de Python.

De Documentación de Python : " Cuando las claves son cadenas simples, a veces es más fácil especificar pares usando argumentos de palabras clave: "

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

Solución

La principal ventaja es que esta es la única forma en que Python devuelve a) más de un solo valor y b) le da un nombre a ese valor. Otras opciones serían usar una clase (código adicional), devolver una tupla (sin nombres, por lo que tendría que usar índices para acceder a los valores) o permitir devolver solo un valor único, lo que probablemente significaría que todos devolverían un diccionario ya que esa es la solución más simple.

También permite ajustar varios métodos y unir / fusionar sus resultados. Por último, permite devolver fácilmente diferentes conjuntos de pares de valor / nombre para cada llamada, por ejemplo, omitir valores opcionales o devolver sugerencias adicionales.

Otros consejos

Puede usar variables locales si desea:

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 a web2py :

  

En web2py, una solicitud HTTP para   " / app / c / f " se asigna a una llamada a   la función f () en el archivo (controlador)   c.py en la aplicación " app " ;. los   El archivo c.py está escrito en Python. los   La salida de la función f () puede ser un   cadena (en este caso se devuelve),   o un conjunto de variables (implementado como   un diccionario de python) En lo ultimo   caso las variables se representan en   HTML por un archivo c / f.html, llamado   ver.

Lo bueno es que un motor de plantillas como Jinja2 trata un objeto y un dict de manera similar, así que si:

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

entonces todos estos funcionan en la sintaxis de la plantilla:

d.color d['color'] o.color o['color']
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top