Как выполнить вспомогательный скрипт с переменными основного скрипта?

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть основной скрипт на Python, который я запускаю (который довольно длинный), поэтому я разделил его разделы на разные скрипты на python. Я думал, что любые переменные, объявленные в основном скрипте, будут считаться глобальными для вспомогательных скриптов (пока основной скрипт вызывает вспомогательные), но я сталкиваюсь с проблемами. Вот упрощенный пример:

mainscript.py:

 import auxscript

a = 1
auxscript.auxscript()
  

auxscript.py:

 def auxscript():
    print("the value of a is: %s" %a)

if __name__ == '__main__':
    auxscript()
  

Каков правильный способ сделать это? Я бы ожидал, что auxscript сначала будет искать локально a, а затем, не найдя его, искать глобально в пределах области, из которой он запущен (mainscript.py )

Редактировать: Я знаю, что, очевидно, мог бы передавать переменные в функцию через входные данные, но я надеялся, что этого не придется делать. Становится беспорядочно, когда есть много переменных, к которым нужно обращаться вспомогательным скриптам.

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

1. почему бы не передавать аргументы от функции к функции?

2. И возникает ошибка при запуске вашего скрипта как есть? Что это было?

3. @JacobIRR , извините, пытался добавить некоторые пояснения, поскольку понял, что это был бы очевидный способ сделать это. Основной смысл вспомогательного скрипта заключается в уменьшении длины / беспорядка основного скрипта — часть кода, которую я выгружаю, довольно статична. Однако он обращается ко многим переменным в основном скрипте. На мой взгляд, не имеет особого смысла передавать 20 переменных в эту функцию

4. Ошибка @Reedinationer: ошибка NameError: имя ‘a’ не определено

5. Рассматривали ли вы возможность использования IDE, подобной PyCharm? У вас могут быть длинные функции и классы, которые одним нажатием кнопки сворачиваются в одну строку.

Ответ №1:

Вы можете передать a через свою функцию следующим образом.

mainscript.py:

 import auxscript

a = 1
auxscript.auxscript(a)
  

auxscript.py

 def auxscript():
    print("the value of a is: %s" %a)

if __name__ == '__main__':
    auxscript(a)
  

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

Редактировать: Увидел вашу правку. Почему бы не использовать вышеупомянутую функциональность, но вместо передачи длинного списка переменных вы могли бы передать словарь, используя ** аргументы. Затем ваша функция будет считывать их как переменные ключевого слова.

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

1. Он отредактировал сообщение, добавив «Я надеялся, что мне не придется этого делать» в отношении передачи переменных в его функции