输出时,需要做一些适配。
1. 注意事项与测试代码
1.需要考虑 sizeInBytes 为 None 的场景。
2.除以 1024.0 而非 1024,避免丢失精度。
实现的函数为 getSizeInMb(sizeInBytes),通用的测试代码为
def getSizeInMb(sizeInBytes):return 0def test(sizeInBytes):print '%s ->%s' % (sizeInBytes, getSizeInMb(sizeInBytes))test(None)test(0)test(10240000)test(1024*1024*10)
2. 以 MB 为单位输出 -- 返回 float
通常,电子书的大小在 1 - 50MB 之间,输出时统一转为 MB 是不错的选择。
弊端:
1.输出精度过高,比如 10240000 Bytes 计算结果为 10240000 ->9.765625
2.文件大小有限制,小于 1 MB 或 G 级数据不适合该方式展示
优势:
1.适合于用返回值参与计算
?
12
def getSizeInMb(sizeInBytes):return (sizeInBytes or 0) / (1024.0*1024.0)
3. 以 MB 为单位保留 1 位小数 -- 返回 str
处于精度问题考虑,可以选择保留 1 位小数。
def getSizeInMb(sizeInBytes):
return '%.1f' % ((sizeInBytes or 0) / (1024.0*1024.0), ) # use 1-dimension tuple is suggested
返回值建议写成 '%.1f' % (number,) 而非 '%.1f' % (number)
二者均能正确执行,但后者容易被误判为执行只有一个参数 number 的函数,导致难以判断的错误。
3. 以 MB 为单位保留至多 1 位小数 -- 返回 str
大多数操作系统一般展示至多 1 位小数
def getSizeInMb(sizeInBytes):sizeInMb = '%.1f' % ((sizeInBytes or 0) / (1024.0*1024.0), ) # use 1-dimension tuple is suggestedreturn sizeInMb[:-2] if sizeInMb.endswith('.0') else sizeInMb # python2.5+ required
4. 自动选择最佳单位
def getSizeInNiceString(sizeInBytes):"""Convert the given byteCount into a string like: 9.9bytes/KB/MB/GB"""for (cutoff, label) in [(1024*1024*1024, "GB"),(1024*1024, "MB"),(1024, "KB"),]:if sizeInBytes >= cutoff:return "%.1f %s" % (sizeInBytes * 1.0 / cutoff, label)if sizeInBytes == 1:return "1 byte"else:bytes = "%.1f" % (sizeInBytes or 0,)return (bytes[:-2] if bytes.endswith('.0') else bytes) + ' bytes'
算法说明:
1. 从英语语法角度,只有 1 使用单数形式。其他 0/小数 均使用复数形式。涉及 bytes 级别
2. 精度方面,KB 及以上级别,保留 1 位小数。bytes 保留至多 1 位小数。
这种处理规则,不适合于小数十分位为 0 的情况,比如 10.0 bytes,10.01 bytes。输入结果均为 10 bytes。
大数据和人工智能时代的到来让Python迎来大爆发。学习Python可以做python开发工程师、python高级工程师、Web网站开发工程师、Python自动化测试、Linux运维工程师、python游戏开发工程师、python技术经理、python开发实习等职业选择。就业方向十分广泛。如果你想要专业的学习Python,更多需要的是付出时间和精力,一般在2w左右,4-6个月左右的时间。应该根据自己的实际需求去【千锋】实地看一下,先好好试听之后,再选择适合自己的。只要努力学到真东西,前途自然不会差。