[Python] Numero to byte
lordkrandel
lordkrandel a gmail.com
Mer 12 Gen 2011 12:02:57 CET
On 12/01/2011 11.29, lordkrandel wrote:
> Il bugfix è veloce, ci penso un po' su e lo scrivo meglio quando ho un
> attimo.
def f( bytes, factor, labels, precision ):
# costruisco una tupla di tuple ( limite massimo, etichetta )
# prima faccio l'enumerazione delle etichette, poi faccio fattore**indice
for n, label in map( lambda k: ( factor**k[0], k[1] ), enumerate(labels,1) ):
# se i byte sono sotto il limite, o se è l'ultima etichetta disponibile
if (bytes < n) or (label == labels[-1]):
# ritorna una stringa formattata con i byte
# con l'etichetta corrente e la precisione indicata
return ('%.' + str(precision) + 'lf %s') % (bytes * factor / n, label)
def f_test():
for x in range(22):
y = 512.12*(10**x)
print f(y, 1024, ('', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'), 4)
print ' ', f(y, 1000, ('', 'KB', 'MB', 'GB', 'TB', 'PB' ), 2)
f_test()
Continuo a pensare che per funzioni il cui codice andrà a cambiare poco nel
corso del tempo, più della chiarezza della sintassi del codice conti
la chiarezza della funzionalità che offre.
Certo capire come funziona non è proprio semplicissimo, ma in quello possono
aiutare due righe di commento.
--
Wyrmskull
Maggiori informazioni sulla lista
Python