Domanda

Perché (ad esempio web2py) restituisci dati da un controller in un dizionario anziché variabili (vedi Rails)?

Ad esempio:

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

invece di (è così che fa Rails)

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

C'è qualche vantaggio nell'usare i dizionari rispetto alle variabili semplici (in termini di velocità / in termini di codice)?

Aggiornamento: il modo sopra è in realtà un modo corretto per creare un dizionario (almeno in Python 2.6.1). L'altro modo (che molte persone dicono sia quello corretto)

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

non è molto usato dai framework Python.

Da la documentazione di Python : " Quando le chiavi sono stringhe semplici, a volte è più facile specificare le coppie usando argomenti di parole chiave: "

dict(sape=4139, guido=4127, jack=4098)
È stato utile?

Soluzione

Il vantaggio principale è che questo è l'unico modo in Python per restituire a) più di un singolo valore e b) dare a quel valore un nome. Altre opzioni sarebbero usare una classe (codice extra), restituire una tupla (senza nomi, quindi dovresti usare gli indici per accedere ai valori) o consentire di restituire un solo valore che probabilmente significherebbe che tutti restituirebbero un dizionario poiché è la soluzione più semplice.

Permette anche di racchiudere diversi metodi e unire / unire i loro risultati. Infine, consente di restituire facilmente diversi insiemi di coppie valore / nome per ogni chiamata, ad esempio omettere valori opzionali o restituire suggerimenti aggiuntivi.

Altri suggerimenti

Puoi utilizzare le variabili locali se desideri:

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>

da PHP a web2py :

  

In web2py una richiesta HTTP per   & Quot; / app / c / f " viene mappato in una chiamata a   la funzione f () nel file (controller)   c.py nell'applicazione "app". Il   il file c.py è scritto in Python. Il   l'output della funzione f () può essere a   stringa (in questo caso viene restituita),   o un insieme di variabili (implementato come   un dizionario Python). In quest'ultimo   nel caso in cui le variabili siano rese   HTML da un file c / f.html, chiamato a   view.

La cosa bella è che un template engine come Jinja2 tratta un oggetto e un dict in modo simile, quindi se:

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

quindi funzionano tutti nella sintassi del modello:

d.color d['color'] o.color o['color']
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top