这个测试让我有点摸不透了啊, 谁能解释下呢?

2013-12-30 10:55:51 +08:00
 geew
代码如下:
def test(func):
@wraps(func)
def wrapper(*args, **kwargs):
t = time.time()
func(*args, **kwargs)
print func.__name__, time.time() - t
return
return wrapper


@test
def format_test():
for i in range(_item):
s = '{a}hello{b}hello{c}'.format(a='wen', b='guo', c='wen')


@test
def plus_test():
for i in range(_item):
s = 'wen'+'hello'+'guo'+'hello'+'wen'


@test
def tuple_test():
for i in range(_item):
s = '%shello%shello%s' % ('wen', 'guo', 'wen')


if __name__ == '__main__':
format_test()
plus_test()
tuple_test()

结果:
format_test 0.0439848899841
plus_test 0.00256514549255
tuple_test 0.0123269557953


问题:
为啥直接加花费的时间要低呢? 这不科学啊, 一直以为它应该是最慢的才对啊啊啊
2034 次点击
所在节点    问与答
3 条回复
9hills
2013-12-30 11:16:59 +08:00
1. 标准库有测试工具 http://docs.python.org/2/library/timeit.html 不需要重复造轮子,而且造的还不好

2. 测试时间尽量达到s级,否则误差太大

3. +比string format快是正常的,这个还用疑惑?一般来说+的性能比较对象是join。join在大数量级比+快
binux
2013-12-30 11:24:31 +08:00
+直接被优化掉了
9hills
2013-12-30 11:58:18 +08:00
优化掉+1

有心情可以测试下
a=''
for i in range(1,100000):
__a += str(i)
print a

或者

a=[]
for i in range(1, 100000):
__a.append(str(i))
print ''.join(a)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/95008

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX