<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def humanize_bytes(b, precision=1):
 """Return a humanized string representation of a number of b. Assumes `from __future__ import division`. '1 byte' '1.0 kB' '123.0 kB' '12.1 MB' '12.05 MB' '1.21 MB' '1.31 GB' '1.3 GB' """

    # abbrevs = (
    #     (1 << 50L, 'PB'),
    #     (1 << 40L, 'TB'),
    #     (1 << 30L, 'GB'),
    #     (1 << 20L, 'MB'),
    #     (1 << 10L, 'kB'),
    #     (1, 'b')
    # )
    abbrevs = (
        (1 << 50, 'PB'),
        (1 << 40, 'TB'),
        (1 << 30, 'GB'),
        (1 << 20, 'MB'),
        (1 << 10, 'kB'),
        (1, 'b')
    )
    if b == 1:
        return '1 byte'
    for factor, suffix in abbrevs:
        if b >= factor:
            break
    # return '%.*f %s' % (precision, old_div(b, factor), suffix)
    return '%.*f %s' % (precision, b // factor, suffix)