跨模块的Python用户定义全局变量:在运行其他模块时调用这些变量的问题

跨模块的Python用户定义全局变量:在运行其他模块时调用这些变量的问题,python,variables,module,user-defined,Python,Variables,Module,User Defined,我对Python相当陌生,目前正在学习在Python程序中使用函数和多个模块 我有两个模块“Functions\u Practice\u Main”(运行一个菜单)和“Functions\u Practice”,其中有一个简单程序的代码,可以计算出用户的输入是否除以7(我知道……相当枯燥的练习) 我想做的是让用户在菜单模块运行时输入他们的名字,然后通过在整个程序中显示这个全局变量,使程序更加个性化 但是,当我运行菜单模块时,它会两次询问名称。输入的第一个名称显示在“除以7”程序中,输入的第二个名

我对Python相当陌生,目前正在学习在Python程序中使用函数和多个模块

我有两个模块“Functions\u Practice\u Main”(运行一个菜单)和“Functions\u Practice”,其中有一个简单程序的代码,可以计算出用户的输入是否除以7(我知道……相当枯燥的练习)

我想做的是让用户在菜单模块运行时输入他们的名字,然后通过在整个程序中显示这个全局变量,使程序更加个性化

但是,当我运行菜单模块时,它会两次询问名称。输入的第一个名称显示在“除以7”程序中,输入的第二个名称显示在菜单中。我理解为什么会发生这种情况(由于导入函数\u Practice模块要求在其余代码有机会运行之前知道函数\u Practice\u Main模块中的全局变量),但我真的需要知道如何解决这个问题

如何让用户在运行菜单模块时输入一次自己的名称,然后通过程序显示此全局变量,以使其更个性化

功能\u实践\u主功能

import Functions_Practice, sys


name = input("What is your name? ")

def main():

while True:

  print(name, "'s Menu")
  print("*******************")
  print("1. Can you divide by 7?")
  print("2. Quit")
  print("*******************")
  selection = int(input("Your number selection please..."))

  if selection == 1:
    Functions_Practice.main()
  elif selection == 2:
    sys.exit()
  else:
    print("Your number selection was invalid, please try again...")


 if __name__ == '__main__':
    main()
*功能\u实践*

import Functions_Practice_Main

def inputData(name):
    print(name)
    number = int(input(" Please enter your number: "))
    return number

def processData(number):
    answer = number % 7
    if answer == 0:
        remainder = True
    else:
        remainder = False
    return remainder

def outputData(remainder):
    if remainder == True:
        print("The number you entered doesn't have a remainder")
    elif remainder == False:
        print("The number you entered does have a remainder")



def main():
    number = inputData(Functions_Practice_Main.name)
    remainder = processData(number)
    outputData(remainder)


if __name__ == '__main__':
    main()

将模块作为脚本运行并不视为将其作为模块导入。当Functions\u Practice\u Main.py脚本导入Functions\u Practice,而Functions\u Practice导入Functions\u Practice\u Main时,Python并不关心Functions\u Practice\u Main.py中的代码是否已经作为主脚本运行。Python将再次运行它以生成模块

你怎么解决这个问题?嗯,有几件事你应该做。首先,尽可能避免循环进口。不要让函数\u Practice导入函数\u Practice\u Main,而是将函数\u Practice\u Main中的任何数据函数\u Practice需要作为函数参数传递

在函数\u实践\u Main中:

Functions_Practice.interactive_remainder_test(name)
在实践中:

def interactive_remainder_test(name):
    number = inputData(name)
    remainder = processData(number)
    outputData(remainder)
第二,像这样的事情:

name = input("What is your name? ")

属于文件的
main
,因为它们在导入文件时不应运行。

非常感谢您的快速回复。真的很有帮助。我想知道你是否能够把锦上添花,并张贴一个例子,将变量“name”的内容(一旦它被放回函数_Practice_Main的def Main中)传递到函数_Practice中的函数中?@samwickins32:提供的例子。