On 2012-11-03 10:07, orsomannaro wrote:
Il 03/11/2012 01:09, orsomann...@gmail.com ha scritto:
e questo succede per altri campi
dato che tutti i molti valori numerici di questo file binario sono
letti con la stessa logica, potrei scrivere:
Sì, è una buona idea isolare questa operazione ripetitiva in una
funzione
def hex2num(*args):
num = ''
for arg in args:
num += '%02x' % ord(arg)
return num[:-1].lstrip('0')
Questo va bene, funziona. Un modo più idiomatico di scriverlo è (non
provato):
def hex2num(*args):
num = ''.join('%02x' % ord(arg) for arg in args)
return num[:-1].lstrip('0')
codice = hex2num(*(data[8], data[9], data[10]))
questo puoi scriverlo semplicemente come
codice = hex2num(data[8], data[9], data[10])
il senso di *args nella dichiarazione della funzione è quello di
impacchettare tutti gli argomenti in una tupla, e quello nel richiamo
della funzione è quello di espandere una sequenza in argomenti singoli.
Quindi come hai scritto tu il richiamo della funzione ci sono un
impacchettamento e poi uno spacchettamento consecutivi, di cui puoi
farne a meno.
Nota che se i byte sono sempre contigui, come immagino siano, avrebbe
più senso che tu passassi una string alla funzione e non i singoli
caratteri, scrivi una funzione che tu possa richiamare con
codice = hex2num(data[8:11])
Te la lascio fare per esercizio. Ma secondo me cambia un solo carattere
:)
Ma visto che l'operazione viene eseguita periodicamente e che i
record da leggere sono diverse centinaia, mi conviene dal punto di
vista computazionale?
Non ha assolutamente senso pensare al costo di questa ora. Sono sicuro
sia un'ottimizzazione preventiva. Questo lo potrai valutare bene solo
quando avrai finito e tutto il programa starà girando.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python