глобальная переменная против функций получения и функциональной переменной

#python #python-3.x #functional-programming #global-variables

#python #python-3.x #функциональное программирование #глобальные переменные

Вопрос:

У меня есть сценарий, который может быть реализован несколькими способами. Мне нужно предложение, которое является более оптимизированным / python способом реализации и почему?

давайте рассмотрим вызовы вложенных функций как funca1 -> funca2 -> funca3 -> funca4 funcb1 -> funcb2 -> funcb3 -> funcb4

 if __name__ == "__main__":
    funca1()
    funcb1()
  

и переменная varx используется / или требуется только funca4 и funcb3.
тогда у нас есть следующие варианты

  1. создайте varx как глобальную переменную и используйте его funca4 и funcb3, не проходя через все функции
  2. передайте переменную varx во все функции, даже если она используется только в двух функциях
  3. создайте другую функцию functions get_varx() и используйте ее только внутри funca4, funcb4.

Этого также можно достичь, создав класс и назначив varx в качестве свойства . Но текущий дизайн проекта не позволяет этого

Ответ №1:

Я запустил демонстрационный код с приведенными вами сценариями, рассчитал время выполнения с помощью time модуля и получил следующие результаты:

Рейтинг самого быстрого выполнения:

  1. Создание другой функции для получения значения.
  2. Создание varx в качестве глобальной переменной.
  3. Передача varx переменной через все функции.

Комментарии:

1. Вы можете прочитать об этом здесь . Я использовал perf_counter() метод для получения результатов.

2. Вы можете прочитать об этом здесь . Я использовал perf_counter() метод для получения результатов.

Ответ №2:

Оптимизация относительна.

Вы можете оптимизировать с помощью:-

  1. в вашем коде должно быть меньше строк / символов

  2. вы хотите минимальное потребление памяти

  3. требуется минимальное время.

Минимальное время было бы другим методом функции

Минимальная память и минимальные строки будут глобальной переменной.

Передача переменной через all просто не нужна и дублирует переменные в каждой локальной области, потребляя много памяти, поэтому этого следует избегать.