Warum Frameworks Python Wörterbücher von dem Controller zurückgeben?
-
10-07-2019 - |
Frage
Warum (zB web2py) haben Sie Daten von einem Controller in einem Wörterbuch zurückzukehren anstelle von Variablen (siehe Rails)?
Zum Beispiel:
return dict(sape=4139, guido=4127, jack=4098)
statt (das ist die Art und Weise Rails tut es)
@var1 = "jello"
@var2 = "hihi"
Gibt es einen Vorteil Wörterbücher über Normalgrößen (Geschwindigkeit her / code weise) mit?
Update: Die oben genannte Art und Weise ist eigentlich eine richtige Art und Weise ein Wörterbuch für die Erstellung von (zumindest in Python 2.6.1). Die andere Art und Weise (dass viele Leute sagen, es ist die richtige)
return {"var1": "jello", "var2": "hihi"}
ist eine Menge von Python-Frameworks nicht verwendet.
Python Dokumentation : „Wenn die Tasten sind einfache Strings, ist es manchmal einfacher, Paare mit Keyword-Argumente angeben:“
dict(sape=4139, guido=4127, jack=4098)
Lösung
Der Hauptvorteil besteht darin, dass dies der einzige Weg in Python ist eine Rückkehr) mehr als ein einziger Wert und b) gibt diesem Wert eines Namen. Andere Optionen wären eine Klasse (Zusatz) zu verwenden, ein Tupel zurückgeben (keine Namen, so dass Sie Indizes müßten verwenden, um die Werte zugreifen) oder erlauben nur einen einzigen Wert zurückgeben, die wahrscheinlich bedeuten würde, dass jeder einen zurückkehren Wörterbuch denn das ist die einfachste Lösung.
Es ermöglicht auch mehrere Methoden und kommen / fusionieren ihre Ergebnisse zu wickeln. Schließlich ermöglicht es leicht für jeden Anruf verschiedene Sätze von Wert / Namenspaaren zurück, beispielsweise optionale Werte weglassen oder zusätzliche Hinweise zurück.
Andere Tipps
Sie können lokale Variablen verwenden, wenn Sie möchten:
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>
In web2py eine HTTP-Anforderung für „/ App / C / F“ abgebildet wird, in einen Aufruf die Funktion f () in der Datei (Controller) c.py in der Anwendung "app". Das Datei c.py ist in Python geschrieben. Das Ausgang der Funktion f () kann eine sein, string (in diesem Fall ist es zurückgegeben), oder ein Satz von Variablen (implementiert als ein Python-Wörterbuch). In Letzterem Fall werden die Variablen gemacht in HTML durch eine Datei c / f.html, eine so genannte Ansicht.
Das Schöne daran ist, dass eine Template-Engine wie Jinja2 behandeln ein Objekt und ein dict ähnlich, also wenn:
d = {'color': 'red'}
o = Color(red)
diese dann alle Arbeiten in der Vorlage Syntax:
d.color d['color'] o.color o['color']