将.lower()放在一个地方或另一个地方之间有区别吗?

时间:2016-04-07 21:23:37

标签: python python-3.x

我不确定在下面的示例中将.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并未受到影响,而在第一种情况下,它是,但我想知道任何其他差异,例如速度/效率。

4 个答案:

答案 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)

如果您想查看事情是否更快,%timeitiPython

的好方法
#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

但要回答你的问题,它们是相同的:)