Влияет ли длина имени переменной на скорость работы программы? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть небольшой фрагмент кода, который должен выполняться долго и долго.Мне интересно, может ли длина имен переменных, которые я использую, повлиять на скорость выполнения программы.Вот очень простой пример, написанный на Python.

Программа A

    x = 1
    while not x == 0:
          print('message')

Программа B

    xyz = 1
    while not xyz == 0:
          print('message')

Будет ли программа A печатать «сообщение» больше раз, чем программа Bесли я запускаю программу A и программу B в течение 30 лет на двух одинаковых машинах.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Разница очень мала, и мы не можем сделать вывод, что это из-за имени переменной.

import timeit
x=1
xyz=1


start_time = timeit.default_timer()
for i in range(1,1000000):
    if x==1:
        print("message")
elapsed = timeit.default_timer() - start_time


start_time2 = timeit.default_timer()
for i in range(1,1000000):
    if xyz==1:
        print("message")

elapsed2 = timeit.default_timer() - start_time2

print("small variable printing = ",str(elapsed),"big variable printing = "+str(elapsed2))

И результат был:

small variable printing =  3.6490847053481588 big variable printing = 3.7199463989460435
0 голосов
/ 30 ноября 2018

Нет, сами имена не влияют на скорость выполнения результирующего кода.Имена переменных просто используются для различения в источнике Python двух переменных, которые представлены целочисленными индексами в таблице поиска:

>>> dis.dis('x=1')
  1           0 LOAD_CONST               0 (1)
              2 STORE_NAME               0 (x)
              4 LOAD_CONST               1 (None)
              6 RETURN_VALUE
>>> dis.dis('xyz=1')
  1           0 LOAD_CONST               0 (1)
              2 STORE_NAME               0 (xyz)
              4 LOAD_CONST               1 (None)
              6 RETURN_VALUE
>>> dis.dis('x=1;xyz=2;')
  1           0 LOAD_CONST               0 (1)
              2 STORE_NAME               0 (x)
              4 LOAD_CONST               1 (2)
              6 STORE_NAME               1 (xyz)
              8 LOAD_CONST               2 (None)
             10 RETURN_VALUE

В первых двух вы заметите, что никаких различий на основе имени переменной сделано не будет.в полученном байт-коде.В последнем случае вы увидите, что байт-код различает два, но только в том порядке, в котором они определены, а не в длине метки.

...