Есть ли что-нибудь, что можно получить от коротких имен переменных?
Есть ли что-нибудь, что можно получить в память и скорость, имея более короткие имена переменных на языке, таком как python?
И если да, то в каких ситуациях было бы разумно рассмотреть это?
Примечание
Я никоим образом не защищаю короткие имена переменных, мне просто интересно, пожалуйста, (пере) прочитать вопрос.
Примечание 2
Пожалуйста, я понимаю значение описательных имен переменных. Я просмотрел достаточно кода, чтобы предпочесть описательные имена над более короткими именами и понять его значение. Обычная Нет на самом деле не помогает.
Ответы
Ответ 1
Там проблема с "как python" , потому что не все интерпретируемые языки одинаковы.
С чисто интерпретируемым языком он будет иметь большее влияние, чем с одним, как Python, который имеет шаг до компиляции. Строго говоря, это не языковая разница (у вас может быть один Javascript-движок, который прекомпилирует, а другой - нет), но это влияет на ответ на этот вопрос.
Вытягивая "как python" , чтобы включить каждый интерпретируемый язык, я бы сказал, что ответ "да, для некоторых из них, по крайней мере, некоторое время". Следующий вопрос: "сколько".
В период с 1997 года по начало 1998 года я работал над некоторым довольно сложным кодом javascript, в котором использовались некоторые новые возможности Netscape Navigator 4 и Internet Explorer 4. Это был огромный файл javascript на тот момент - когда распространенность dial-up означает, что каждый килобайт считается с точки зрения скорости сайта.
По этой причине мы использовали минимизатор script. Главное, чтобы это было, чтобы переписать переменные короче (lastHeight
становится a
, userSel
becmomes b
и т.д.).
Это не только сократило время загрузки, но и сделало одну из более тяжелых функций заметно быстрее. Но только заметно, если бы вы были тем, кто провел весь свой рабочий день, не глядя ни на что другое, что в значительной степени означало меня и другого коллегу.
Итак, да, если мы поместим Javascript в категорию "как python" , насколько это интерпретация, то это может иметь значение при следующих условиях:
- Он работал на Pentium, Pentium Pro и 486 (тогда Pentium II был, но у нас их не было). Я получил новую машину частично через проект, а это значит, что я перешел с 133 МГц до 166 МГц.
- Это был довольно большой кусок неприятного цикла (большая часть script не имела заметной разницы).
- Он запускался на script -engine с 15 лет назад без каких-либо улучшений в производительности script -engine, которые были сделаны с тех пор.
И это все еще не так сильно отличалось.
Мы можем предположить, что некоторые другие интерпретируемые языки также затронуты так же мелкой степенью.
Даже в 1997 году, я бы не стал беспокоиться, если бы он не совпадал с моим другом преимуществом, и я, конечно, не работал над минимизированной версией.
Ответ 2
Нет. № Нет. Нет.
Нет.
Используйте читаемые имена, а не короткие имена. Разница в производительности абсолютно пренебрежимо мала.
$ python -m timeit "i = 5" "i *= i"
10000000 loops, best of 3: 0.0938 usec per loop
$ python -m timeit "is_there_anything_to_be_gained_from_short_variable_names = 5" "is_there_anything_to_be_gained_from_short_variable_names *= is_there_anything_to_be_gained_from_short_variable_names"
10000000 loops, best of 3: 0.0927 usec per loop
По иронии судьбы, при измерении на этом ПК длинное имя переменной было, следовательно, измерено на ~ 0,001 мкс быстрее за выполнение.
Ответ 3
Если вы имеете в виду интерпретируемые языки по замечанию "языки, такие как Python", то да, это будет иметь значение, поскольку синтаксический анализ может занять несколько больше времени. Разница незаметна, я бы сказал.
Я полностью согласен с ночным кошмаром; не делай этого. Сделайте свой код читаемым для человека. Пусть анализатор/компилятор обрабатывает читаемость для машины.
Помните правила оптимизации:
- Не делай этого.
- (Только для экспертов) еще не делайте этого.
Ответ 4
Вы должны использовать короткие имена переменных только для индексов коротких циклов и когда переменная короткая.
Используйте описательные имена иначе, но не переусердствуйте и не используйте венгерскую нотацию.
Ответ 5
Довольно мало. По общему признанию, это может замедлить поиск имени переменной в первый раз, когда python предварительно скомпилирует ваш script. Однако время, затрачиваемое в результате путаницы, которая возникает из-за коротких имен переменных, намного превышает время, которое было сохранено при выполнении script.
Ответ 6
Следуя ответам orlps, я считал, что классы Python используют словарь для поиска, поэтому я задавался вопросом, есть ли какие-либо преимущества в этом отношении.
import timeit
A = """
class A_CLASS_WITH_A_LONG_NAME:
def a_function_with_a_long_name(self):
return 1
A_CLASS_WITH_A_LONG_NAME().a_function_with_a_long_name()
"""
B = """
class A:
def a(self):
return 1
A().a()
"""
print(timeit.timeit(stmt = A, number = 1000000))
print(timeit.timeit(stmt = B, number = 1000000))
Получаем цифры:
- Long = 12.362802280999858
- Short = 11.445085418999952
Что примерно на 8% отличается.
Запуск внутри модуля (number = 100000000
) вместо использования timeit
:
- Long = 24.87908697128296
- Short = 24.695187091827393
Что примерно на 1% отличается.
Я бы пришел к выводу, что может быть разница с встроенным кодом или сложностями профилировщика timeit
(timeit
, кажется, примерно на 50 раз медленнее), но Cpython, похоже, делает хорошую работу по оптимизации любых различий. Я не могу сказать, будет ли это справедливо для класса с большим количеством членов, поскольку dict
будет иметь больше кодов.