python: доступ к переменной в функциях в разных модулях - PullRequest
0 голосов
/ 10 октября 2019

Я вычеркнул то, что я пытаюсь сделать, до самой простой формы. У меня есть один модуль (prog1.py), который работает нормально. Функция в prog1.py обращается к переменной (yy) OK без ошибок.

#prog1.py 
def func():
    print (yy)
    return()

def main(yy):
    print(yy)
    func()
    return()

#-----------------------------------------------
if __name__ == '__main__':     
    yy = 200
    main(yy)

Когда я импортирую этот модуль в другой модуль (prog2.py), та же функция не может получить доступ к переменной (уу).

#prog2.py
import prog1
yy = 200
prog1.main(yy)

Я получаю:

имя 'yy' не определено в строке 3 в функции.

Что такое "правильно" (Python) способ сделать это?

1 Ответ

0 голосов
/ 10 октября 2019

Проблема в func:

def func():
    print (yy)
    return()

Линия print (yy) пытается получить доступ к yy, но if __name__ == '__main__': не будет иметь значение true для этого модуля (__name__ будет prog1не __main__), следовательно, он не войдет внутрь if:

if __name__ == '__main__':     
    yy = 200
    main(yy)

Следовательно, yy не будет определен.

Подробнее о if __name__ == '__main__': в этом вопрос .


Согласно тому, что вы упомянули в комментариях:

#prog1.py

yy = 'prog1 yy'


def func():
    print(yy)


def main(yy):
    print(yy)
    func()


if __name__ == '__main__':
    yy = 200
    main(yy)
# prog2.py

import prog1


yy = 200
prog1.main(yy)

Прогон:

python prog2.py

Вывод:

200
prog1 yy
...