Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中导入文件时遇到问题_Python_Python 3.x - Fatal编程技术网

在Python中导入文件时遇到问题

在Python中导入文件时遇到问题,python,python-3.x,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':

我刚刚发现,当导入一个模块时,它似乎运行了所有的代码,而不是我希望它只运行一个函数。我一直在想办法解决这个问题,但似乎找不到。下面是正在发生的事情

#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()
现在,虽然这段代码按照我所希望的方式工作,但当我第一次启动它时,它将进入主菜单两次。例如:我启动程序,按一,然后它会再次询问我想做什么。如果我再按一次,它将打印“变量号为0”

一旦我开始工作,我想前后导入很多变量。唯一的问题是,如果我在“otherbes.py”中添加更多的import语句,我认为它会越来越多地启动程序。如果我将“fromfmainfileimportnumber”放在“otherbes.py”的第1行,我认为这会引起一个错误。有什么解决办法吗?我可以换一个文件吗?如果我创建了一个类来存储变量,如果可能的话,会怎么样?我对编程非常陌生,如果初学者的答案易于阅读,我将不胜感激。谢谢你的帮助

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

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

if __name__ == "__main__":
    print("I do not print with `import`")
注意,这种行为在Python3中并不是新的,在Python2.x中也是如此。

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

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

if __name__ == "__main__":
    print("I do not print with `import`")
注意,这种行为在Python3中并不是新的,在Python2.x中也是如此。

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

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

if __name__ == "__main__":
    print("I do not print with `import`")
注意,这种行为在Python3中并不是新的,在Python2.x中也是如此。

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

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

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

注意,这种行为在Python3中并不新鲜,它在Python2.x中的工作方式也一样。

正如Jan所指出的,导入就是这样做的。运行导入时,它将运行模块中的所有代码。你可能会想:不,不是的!那
里面的代码是什么呢?那可不行!对,当执行def语句时,它会创建一个新函数,但不会运行它。基本上,它会保存代码供以后使用

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

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

不要试图来回导入变量。沿着这条路走下去的只有痛苦。您应该只导入不变的内容。函数、类等。在任何其他情况下,您都很难让它实现您想要的功能

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

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

我将留给读者一个练习来学习如何做这些事情。

正如Jan所指出的,import就是这样做的。运行导入时,它将运行模块中的所有代码。你可能会想:不,不是的!那
里面的代码是什么呢?那可不行!对,当执行def语句时,它会创建一个新函数,但不会运行它。基本上,它会保存代码供以后使用

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

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

不要试图来回导入变量。沿着这条路走下去的只有痛苦。您应该只导入不变的内容。函数、类等。在任何其他情况下,您都很难让它实现您想要的功能

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

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

我将留给读者一个练习来学习如何做这些事情。

正如Jan所指出的,import就是这样做的。运行导入时,它将运行模块中的所有代码。你可能会想:不,不是的!那这个呢