哪个更快 - 条件字符串格式还是常规 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% 的差异真的对某些东西很重要,你真的需要自己测试一下。