跨模块的Python用户定义全局变量:在运行其他模块时调用这些变量的问题
我对Python相当陌生,目前正在学习在Python程序中使用函数和多个模块 我有两个模块“Functions\u Practice\u Main”(运行一个菜单)和“Functions\u Practice”,其中有一个简单程序的代码,可以计算出用户的输入是否除以7(我知道……相当枯燥的练习) 我想做的是让用户在菜单模块运行时输入他们的名字,然后通过在整个程序中显示这个全局变量,使程序更加个性化 但是,当我运行菜单模块时,它会两次询问名称。输入的第一个名称显示在“除以7”程序中,输入的第二个名称显示在菜单中。我理解为什么会发生这种情况(由于导入函数\u Practice模块要求在其余代码有机会运行之前知道函数\u Practice\u Main模块中的全局变量),但我真的需要知道如何解决这个问题 如何让用户在运行菜单模块时输入一次自己的名称,然后通过程序显示此全局变量,以使其更个性化 功能\u实践\u主功能跨模块的Python用户定义全局变量:在运行其他模块时调用这些变量的问题,python,variables,module,user-defined,Python,Variables,Module,User Defined,我对Python相当陌生,目前正在学习在Python程序中使用函数和多个模块 我有两个模块“Functions\u Practice\u Main”(运行一个菜单)和“Functions\u Practice”,其中有一个简单程序的代码,可以计算出用户的输入是否除以7(我知道……相当枯燥的练习) 我想做的是让用户在菜单模块运行时输入他们的名字,然后通过在整个程序中显示这个全局变量,使程序更加个性化 但是,当我运行菜单模块时,它会两次询问名称。输入的第一个名称显示在“除以7”程序中,输入的第二个名
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:提供的例子。