在Python中导入文件时出现问题

2024-07-05 15:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在才发现,当导入一个模块时,它似乎运行了所有的代码,而不是我希望它只运行一个函数。我一直在想办法解决这个问题,但似乎没办法。这就是正在发生的事情。你知道吗

#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)

现在,虽然这段代码的工作方式和我想要的一样,但当我第一次启动它时,它会进入主菜单两次。例如:我启动程序,按一,然后它又问我想做什么。如果我再按一次,它会打印“变量号为0”。你知道吗

一旦我得到这个工作,我想是导入了很多变量来回。唯一的问题是,如果我添加更多的import语句到“别处.py“我认为它会越来越多地启动这个项目。如果我把“从主文件导入编号”放在别处.py“,我认为这是一个错误。有什么解决办法吗?我能换个文件吗?如果我创建了一个类来存储变量呢,如果可能的话?我是一个非常新的编程,我会很感激如果答案是容易阅读的初学者。谢谢你的帮助。你知道吗


Tags: 代码frompyimportnumbermaindefdo
2条回答

import执行导入的代码

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

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

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

请注意,这种行为在Python3中并不新鲜,在Python2.x中也是如此。你知道吗

正如简所说,import就是这么做的。当您运行import时,它将运行模块中的所有代码。你可能会想:不,不是的!那something_else里面的代码呢?那可跑不了!对,当def语句被执行时,它会创建一个新函数,但不会运行它。基本上,它会保存代码以备将来使用。你知道吗

解决方案是,几乎所有有趣的代码都应该在一个函数中。有一些情况可以放在顶层,但如果有疑问,可以放在函数中。在您的特定情况下,不应该在顶层打印,如果出于某种原因需要打印,请将其放入函数中,并在需要时调用它。如果你在乎什么时候发生什么事,就把它放在一个函数里。你知道吗

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

不要试图来回导入变量。在那条路上只有痛苦。你应该只导入不变的东西。函数、类等。在任何其他情况下,你都很难让它做你想做的事情。你知道吗

如果要在不同位置之间移动变量,可以使用其他选项:

  • 传递函数参数
  • 函数返回值
  • 使用类

我将留给读者练习如何做这些事情。你知道吗

相关问题 更多 >