【发布时间】:2012-02-29 08:48:22
【问题描述】:
我找到的所有解决方案都是针对列表的。
谢谢。
【问题讨论】:
我找到的所有解决方案都是针对列表的。
谢谢。
【问题讨论】:
这会给你 100 个零字节:
bytearray(100)
或者用非零值填充数组:
bytearray([1] * 100)
【讨论】:
对于bytes,也可以使用文字形式b'\0' * 100。
# Python 3.6.4 (64-bit), Windows 10
from timeit import timeit
print(timeit(r'b"\0" * 100')) # 0.04987576772443264
print(timeit('bytes(100)')) # 0.1353608166305015
更新1:使用constant folding in Python 3.7,来自的字面量现在快了近20倍。
更新 2: 显然常量折叠是有限制的:
>>> from dis import dis
>>> dis(r'b"\0" * 4096')
1 0 LOAD_CONST 0 (b'\x00\x00\x00...')
2 RETURN_VALUE
>>> dis(r'b"\0" * 4097')
1 0 LOAD_CONST 0 (b'\x00')
2 LOAD_CONST 1 (4097)
4 BINARY_MULTIPLY
6 RETURN_VALUE
【讨论】:
timeit 将字符串语句传递给compile,然后传递给exec。为什么将timeit 包装在print 函数中会对定时器输出产生显着影响?它只是在计时结束后打印一个浮点数。我无法复制。