无法在Python中导入文件

时间:2014-06-27 01:03:34

标签: python python-3.x

我现在才发现,在导入模块时,它似乎贯穿了所有代码,而不仅仅是我希望它通过的一个函数。我一直试图找到解决方法,但似乎无法得到它。这是正在发生的事情。

#mainfile.py    
from elsewhere import something_else
number = 0
def main():
    print('What do you want to do? 1 - something else')
    donow = input()
    if donow == '1':
        something_else()
while 1:
    main()
 
#elsewhere.py
print('I dont know why this prints')
def something_else():
    from mainfile import number
    print('the variable number is',number)

现在,虽然这个代码KIND OF以我想要的方式工作,但是当我第一次启动它时,它将进入主菜单两次。例如:我启动程序,按一个,然后它会问我想再做什么。如果我再按一次,那么它将打印"变量号为0"。

一旦我开始工作,我想来回导入很多变量。唯一的问题是,如果我向" others.py"添加更多的import语句。我认为它会越来越多地启动该计划。如果我把"从主文件导入号码"在" others.py"的第1行,我认为这会引发错误。这有什么变通方法吗?我可以制作不同的文件吗?如果我创建了一个类来存储变量,如果可能的话怎么办?我对编程非常陌生,如果答案很容易为初学者阅读,我将不胜感激。感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

正如Jan所说,这就是导入的作用。运行导入时,它会运行模块中的所有代码。你可能会想:不,它没有! something_else内的代码怎么样?那不会运行!是的,当执行def语句时,它会创建一个新函数,但它不会运行它。基本上,它会保存代码以供日后使用。

解决方案是几乎所有有趣的代码都应该在一个函数中。有一些情况下放在顶层是有意义的,但如果有疑问,请将其置于函数内。在您的特定情况下,如果由于某种原因需要打印,则不应在顶层打印,将其放入函数中并在需要时调用它。如果您关心某些事情发生,请将其置于一个功能中。

在第二个节点上,请勿在其他脚本中导入主脚本。即如果直接使用mainfile.py,请不要在其他文件中导入。你可以但它会产生令人困惑的结果,最好假装它不起作用。

不要尝试来回导入变量。沿着这条道路走下去只会带来痛苦。您应该只导入不会更改的内容。函数,类等。在任何其他情况下,你都很难做到你想做的事。

如果您想在不同地点之间移动变量,您还有其他选择:

  • 传递函数参数
  • 从函数返回值
  • 使用班级

我会让读者学习如何做这些事情。

答案 1 :(得分:1)

import执行导入的代码

import只需获取Python源文件并执行它。这就是它打印的原因,因为该指令在代码中,并且导入所有指令都会被执行。

为防止执行部分导入的包/模块,您应使用着名的:

if __name__ == "__main__":
    print("I do not print with `import`")

请注意,这种行为在Python 3中并不新鲜,它在Python 2.x中的工作方式也相同。