Python 如何在不同的文件上使用输入变量?

Python 如何在不同的文件上使用输入变量?,python,pycharm,Python,Pycharm,这是我的密码 \uuuu主菜单\uuuu.py: def main_menu(): global action action = input("Welcome where do you want to go? > ") from __Main_menu__ import * main_menu() print(action) 游戏.py: def main_menu(): global action action = input("Welcome whe

这是我的密码

\uuuu主菜单\uuuu.py

def main_menu():
    global action
    action = input("Welcome where do you want to go? > ")
from __Main_menu__ import *
main_menu()
print(action)
游戏.py

def main_menu():
    global action
    action = input("Welcome where do you want to go? > ")
from __Main_menu__ import *
main_menu()
print(action)
我想知道您是如何获得它的,以便可以在
游戏.py
中重新识别
主菜单中的动作变量

当我运行
game.py
时,出现以下错误:

Traceback (most recent call last):
  File "/Users/gbrown/PycharmProjects/untitled/game.py", line 3, in <module>
    print(action)
NameError: name 'action' is not defined
回溯(最近一次呼叫最后一次):
文件“/Users/gbrown/PycharmProjects/untitled/game.py”,第3行,在
印刷(行动)
NameError:未定义名称“操作”

Python中的global对于一个模块是全局的,而不是跨所有模块。python中的全局变量不是C全局变量。因此,当您尝试导入*时,您在game.py模块中创建了一个新的全局动作,但在主菜单.py中不同,它是一个新的全局动作。但是,操作仍然存在于Main_menu.py中,Main_menu()函数将对其进行操作

更好的方法是明确返回变量,但不是问题的答案。因此,对于您来说,做您想做的事情,您必须显式导入您想做的事情,并使用模块名称从主菜单中提取实际操作全局

\uuuu主菜单\uuuu.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
此处,操作附加到模块/文件主菜单.py。当您尝试导入*时,您将在导入的新模块的上下文中创建一个新的全局操作,其值为None。但没有与模块中定义的操作以及功能菜单更新值的位置的链接

如果您以更“经典”的方式导入它,并保留路径(导入主菜单)或定义特定路径(导入\u主菜单为mm),则在这种情况下,存在差异,本地全局和其他全局模块之间没有重叠。因此,在这种情况下,可以通过引用路径从模块访问全局

game.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
在这种情况下,全局不会发生碰撞,您可以访问mm.action

但是

这种情况下的全局优化不是最佳做法或良好做法。最好有这个:

\uuuu主菜单\uuuu.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
在这里,我们从不使用全局。我们只是想让函数给我们一个信息。这就是为什么我们使用return关键字,意思是:将本地值返回给调用我的用户

game.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
在这里,当您调用main_menu()时,main_menu()返回一个值,该值会影响动作变量。您拥有您的信息,而不使用全球资源。它更好,因为没有重叠,没有歧义,并且可以以更通用的方式使用它。
这里还有更多信息:

Python中的Globals对于一个模块来说是全局的,而不是跨所有模块。python中的全局变量不是C全局变量。因此,当您尝试导入*时,您在game.py模块中创建了一个新的全局动作,但在主菜单.py中不同,它是一个新的全局动作。但是,操作仍然存在于Main_menu.py中,Main_menu()函数将对其进行操作

更好的方法是明确返回变量,但不是问题的答案。因此,对于您来说,做您想做的事情,您必须显式导入您想做的事情,并使用模块名称从主菜单中提取实际操作全局

\uuuu主菜单\uuuu.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
此处,操作附加到模块/文件主菜单.py。当您尝试导入*时,您将在导入的新模块的上下文中创建一个新的全局操作,其值为None。但没有与模块中定义的操作以及功能菜单更新值的位置的链接

如果您以更“经典”的方式导入它,并保留路径(导入主菜单)或定义特定路径(导入\u主菜单为mm),则在这种情况下,存在差异,本地全局和其他全局模块之间没有重叠。因此,在这种情况下,可以通过引用路径从模块访问全局

game.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
在这种情况下,全局不会发生碰撞,您可以访问mm.action

但是

这种情况下的全局优化不是最佳做法或良好做法。最好有这个:

\uuuu主菜单\uuuu.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
在这里,我们从不使用全局。我们只是想让函数给我们一个信息。这就是为什么我们使用return关键字,意思是:将本地值返回给调用我的用户

game.py:

action = None
def main_menu():
   global action
   action = input("Welcome where do you want to go? > ")
import __Main_menu__ as mm
mm.main_menu()
print(mm.action)
def main_menu():
   action = input("Welcome where do you want to go? > "
   return action
from __Main_menu__ import *
action=main_menu()
print(action)
在这里,当您调用main_menu()时,main_menu()返回一个值,该值会影响动作变量。您拥有您的信息,而不使用全球资源。它更好,因为没有重叠,没有歧义,并且可以以更通用的方式使用它。
这里还有更多信息:

为什么不从
主菜单显式返回它呢?然后只需
action=main_menu()
即可在
game.py
中访问它。只需将变量分配到main_menu之外即可。全局指示符本身不生成全局变量,如果全局变量存在,它将简单地重复使用,而不是创建一个新的本地变量。为什么不从
主菜单显式返回它呢?然后只需
action=main_menu()
即可在
game.py
中访问它。只需将变量分配到main_menu之外即可。全局指示器本身不生成全局变量,如果存在全局变量,它将简单地重新使用它,而不是创建新的局部变量。关于全局,还是第二种解决方案?希望这能帮助。。。我已经完成了我之前关于全球的回答,还是第二个解决方案?希望这能帮助。。。我完成了先前的回答