[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