Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami

ARGOMENTO: sintassi funzione

sintassi funzione 9 Anni 9 Mesi fa #171

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Ciao,

chi mi spiega questa sintassi
datetime.date(*(int(d) for d in v['date'].split('-')))
?

Non ho mai visto passare un for come argomento di funzione.

date() prende 3 argomenti e lo split() in questione ritorna 3 elementi: il tutto funziona, ma non capisco il significato dell'asterisco e cosa ritorna cosa.
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:sintassi funzione 9 Anni 9 Mesi fa #172

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
Ciao, questa tecnica si chiama comprehension, e nel caso specifico "tuple comprehension".
Praticamente prendono una stringa contenente una data (v) sulla quale, tramite il for, creano una lista di elementi (gli elementi della data: anno, mese, giorno, ...) splittanto la stringa tramite il delimitatore "-".
Detto in italiano stanno facendo "crea una tupla a partire dagli elementi che ottieni splittando la stringa per '-'".

Dopodichè, grazie a quel * prima della tupla, passano alla funzione i singoli elementi della tupla invece che la tupla intera.
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
Ultima modifica: 9 Anni 9 Mesi fa da enlightx.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:sintassi funzione 9 Anni 9 Mesi fa #173

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Ma quindi è il for a ritornare la tupla? Poi quel cast a int su cosa viene fatto (so che viene fatto sui singoli elementi della lista, ma come mai fuori dal for)? Ad ogni modo, la sintassi con l'asterisco serve appositamente a trasformare una tupla nell'insieme dei parametri della funzione?

Grazie :blush:
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:sintassi funzione 9 Anni 9 Mesi fa #174

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
immagina di avere una stringa del tipo "01-01-2010" e di avere una funzione che manipola la data, ma che si aspetta tre parametri che sono giorno, mese ed anno.

alla funzione manipola_data(), dovrai passare i tre parametri singolarmente, oppure usare un "accrocchio" che al volo converte la stringa con la data in tre parametri singoli.

python ha molti "accrocchi" (vedi le funzioni lambda) per risparmiare righe di codice.
Essendo un linguaggio pseudo interpretato, e attualmente anche poco performante, dobbiamo in produzione risparmiare il più possibile sulle linee di codice.

le comprehension sono uno di questi accrocchi.

Inoltre, quella funzione si aspetterà i tre parametri come numeri interi, ma la funzione .split() ci ritorna una lista di stringhe, che dovrà essere appunto convertita in lista di interi con il casting.

In fine, la funzione aspetta tre parametri, ma lo split ci ritorna una lista...quindi risolviamo quest'ultimo problema con quell'asterisco all'inizio di tutto.

L'asterisco non è una prerogativa di Python, in molti linguaggi ci ritroviamo strutture come **kwarg, **argv e simili
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
Ultima modifica: 9 Anni 9 Mesi fa da enlightx.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re:sintassi funzione 9 Anni 9 Mesi fa #178

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Grazie enlightx.

Per l'asterisco ho trovato questo riferimento:
http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists.

Stavo cercando anche qualcosa su quel int(d) fuori dal for, ma per ora niente..
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.138 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam