#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. Он отредактировал сообщение, добавив «Я надеялся, что мне не придется этого делать» в отношении передачи переменных в его функции