字符串乘法与for循环

2024-04-27 04:09:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解决一个关于Python的问题CodingBat.com网站. 我为一个简单的问题写了下面的代码-

def string_times(str, n):
    return n * str

官方结果是-

^{pr2}$

两个函数的输出相同。我很好奇字符串乘法(第一个函数)对for循环(第二个函数)的性能如何。我的意思是哪一个比较快而且主要是被使用的?在

另外,请给我一个方法来获得这个问题的答案(使用时间时钟()或类似的东西)


Tags: 函数字符串代码comforstringreturn官方
3条回答

我对以下三个函数进行了计时:

def string_times_1(s, n):
    return s * n

def string_times_2(s, n):
    result = ""
    for i in range(n):
       result = result + s
    return result

def string_times_3(s, n):
    "".join(s for _ in range(n))

结果如下:

^{pr2}$

正如您所见,s * n不仅是最清晰和最简洁的,而且也是最快的。在

我们可以使用the ^{} module来测试:

python -m timeit "100*'string'"
1000000 loops, best of 3: 0.222 usec per loop

python -m timeit "''.join(['string' for _ in range(100)])"
100000 loops, best of 3: 6.9 usec per loop

python -m timeit "result = ''" "for i in range(100):" "  result = result + 'string'"
100000 loops, best of 3: 13.1 usec per loop

你可以看到,倍增是更快的选择。您可以注意到,虽然CPython中的字符串连接版本没有那么糟糕,但是may not be true in other versions of Python。因此,您应该始终选择字符串乘法或str.join(),不仅要考虑速度,还要考虑可读性和简洁性。在

您可以从命令行或代码中使用timeit内容来查看某些python代码的速度有多快:

$ python -m timeit "\"something\" * 100"
1000000 loops, best of 3: 0.608 usec per loop

对你的其他功能做一些类似的事情,并进行比较。在

相关问题 更多 >