我不确定在下面的示例中将.lower()放在Python 3.x中是否重要。
我想知道之间是否存在差异(例如效率或速度):
bob = input("Are you Bob? Yes or no? ").lower()
if bob == "yes":
print("Hi, Bob.")
else:
print("Sorry, wrong person.")
和
bob = input("Are you Bob? Yes or no? ")
if bob.lower() == "yes":
print("Hi, Bob.")
else:
print("Sorry, wrong person.")
据我所知,在第二种情况下,变量bob
并未受到影响,而在第一种情况下,它是,但我想知道任何其他差异,例如速度/效率。
答案 0 :(得分:4)
同样的代码执行相同的操作,因此没有显着差异。
使用哪种选择主要归结为您使用bob
的方式。如果你在多个地方使用它,总是小写,将它转换一次而不是每次使用时都转换它是有意义的。
另一方面,如果您需要用户输入的小写版本和实际版本,只有在需要小写时才将其转换为小写。
答案 1 :(得分:3)
我们可以使用dis
模块查看相应的字节码。
from dis import dis
def case1():
bob = input("Are you Bob? Yes or no? ").lower()
if bob == "yes":
print("Hi, Bob.")
else:
print("Sorry, wrong person.")
def case2():
bob = input("Are you Bob? Yes or no? ")
if bob.lower() == "yes":
print("Hi, Bob.")
else:
print("Sorry, wrong person.")
第一个功能:
>>> dis(case1)
4 0 LOAD_GLOBAL 0 (input)
3 LOAD_CONST 1 ('Are you Bob? Yes or no? ')
6 CALL_FUNCTION 1
9 LOAD_ATTR 1 (lower)
12 CALL_FUNCTION 0
15 STORE_FAST 0 (bob)
5 18 LOAD_FAST 0 (bob)
21 LOAD_CONST 2 ('yes')
# and so on...
对于第二个功能:
>>> dis(case2)
11 0 LOAD_GLOBAL 0 (input)
3 LOAD_CONST 1 ('Are you Bob? Yes or no? ')
6 CALL_FUNCTION 1
9 STORE_FAST 0 (bob)
12 12 LOAD_FAST 0 (bob)
15 LOAD_ATTR 1 (lower)
18 CALL_FUNCTION 0
21 LOAD_CONST 2 ('yes')
# and so on...
执行相同的指令,但顺序略有不同,因此这两个函数应该是等效的。
答案 2 :(得分:1)
其操作相同,在不同的线路上执行。没有区别。
答案 3 :(得分:0)
如果您想查看事情是否更快,%timeit
是iPython
#bob = input("Are you Bob? Yes or no? ").lower()
def bob_1():
bob = "Yes".lower()
if bob == "yes":
print("Hi, Bob.")
else:
print("Sorry, wrong person.")
def bob_2():
bob = "Yes"
if bob.lower() == "yes":
print("Hi, Bob.")
else:
print("Sorry, wrong person.")
%timeit bob_1
%timeit bob_2
#10000000 loops, best of 3: 42.9 ns per loop
#10000000 loops, best of 3: 41.6 ns per loop
但要回答你的问题,它们是相同的:)