哪个更快 - 条件字符串格式还是常规 if/else?
Which is faster - Conditional String Formatting or Conventional if/else?
Method 1 - Conventional if/else
:
from collections import Counter
sentence = Counter(input("What would you like to say? ").lower())
sentence_length = 0
for k, v in sentence.items():
if v > 1:
print("There are {} {}'s in this sentence.".format(v, k))
else:
print("There is {} {} in this sentence.".format(v, k))
sentence_length += v
print("There are {} words, including spaces, in total.".format(sentence_length))
Method 2 - Conditional String Formatting:
from collections import Counter
sentence = Counter(input("What would you like to say? ").lower())
sentence_length = 0
for k, v in sentence.items():
print("There {} {} {}{} in this sentence.".format(("are" if v > 1 else "is"), v, k, ("'s" if v > 1 else "")))
sentence_length += v
print("There are {} words, including spaces, in total.".format(sentence_length))
这两个代码片段都用于计算特定字符在句子中出现的次数。两种方法之间的区别在于 "for" 语句内部的部分 - 条件字符串格式或常规 if/else。我正在尝试找出哪种方法更有效。
由于两者在算法上没有区别,所以回答这个问题的唯一方法就是测试它。
当然很难对包含 input
的程序进行基准测试,所以首先我计算了我输入所需句子所花费的时间,然后我将其替换为常量赋值和 time.sleep(7.8)
.
两个版本都不到 8 秒。而7.8秒之外的大部分时间都花在了print
.
但是,根据 %timeit
,版本 1 比版本 2 快了大约 0.0005 秒,加速了大约 0.006%。
(顺便说一下,您获得的加速比从 str.format
更改为 %
更快。)
我很确定几乎所有的区别都归结为 str.format
有更多的参数,而不是 if
语句和 if
表达式之间的区别。
但是当然,细节可能取决于您选择的 Python 实现,可能还取决于您的版本和平台,以及您提供的输入字符串,最重要的是,您的输入速度有多快.所以,如果这 0.006% 的差异真的对某些东西很重要,你真的需要自己测试一下。
Method 1 - Conventional
if/else
:
from collections import Counter
sentence = Counter(input("What would you like to say? ").lower())
sentence_length = 0
for k, v in sentence.items():
if v > 1:
print("There are {} {}'s in this sentence.".format(v, k))
else:
print("There is {} {} in this sentence.".format(v, k))
sentence_length += v
print("There are {} words, including spaces, in total.".format(sentence_length))
Method 2 - Conditional String Formatting:
from collections import Counter
sentence = Counter(input("What would you like to say? ").lower())
sentence_length = 0
for k, v in sentence.items():
print("There {} {} {}{} in this sentence.".format(("are" if v > 1 else "is"), v, k, ("'s" if v > 1 else "")))
sentence_length += v
print("There are {} words, including spaces, in total.".format(sentence_length))
这两个代码片段都用于计算特定字符在句子中出现的次数。两种方法之间的区别在于 "for" 语句内部的部分 - 条件字符串格式或常规 if/else。我正在尝试找出哪种方法更有效。
由于两者在算法上没有区别,所以回答这个问题的唯一方法就是测试它。
当然很难对包含 input
的程序进行基准测试,所以首先我计算了我输入所需句子所花费的时间,然后我将其替换为常量赋值和 time.sleep(7.8)
.
两个版本都不到 8 秒。而7.8秒之外的大部分时间都花在了print
.
但是,根据 %timeit
,版本 1 比版本 2 快了大约 0.0005 秒,加速了大约 0.006%。
(顺便说一下,您获得的加速比从 str.format
更改为 %
更快。)
我很确定几乎所有的区别都归结为 str.format
有更多的参数,而不是 if
语句和 if
表达式之间的区别。
但是当然,细节可能取决于您选择的 Python 实现,可能还取决于您的版本和平台,以及您提供的输入字符串,最重要的是,您的输入速度有多快.所以,如果这 0.006% 的差异真的对某些东西很重要,你真的需要自己测试一下。