导入我的模块使程序自行运行

时间:2017-10-13 18:42:50

标签: python python-3.x python-3.6

我有一个用作计算器的python程序。我决定学习如何将它导入其他程序,所以我补充说:

if __name__ == "__main__":
    main()

我已尝试多次导入我的模块,它所做的只是在编辑器上只使用import语句运行main函数。我所做的只是输入计算器,它只运行它。我不太确定if name 语句是如何做的,如果有人也会详细说明它如何帮助导入我的程序,那就太棒了。

2 个答案:

答案 0 :(得分:1)

if __name__ == "__main__": main()条件检查您是否通过python解释器运行脚本并调用main()函数。有关更详细的说明,请参阅此问题What does if name == “main”: do?

如果你有这样的程序

# script.py
def hello_world():
    print "Hello World!"

hello_world()

if __name__ == "__main__":
    main()
无论您是导入Hello World!还是从script.py等命令行运行它都会打印

python script.py,因为在两个实例中都会执行函数hello_world()

案例1:从命令行运行

$ python script.py
Hello World!
Traceback (most recent call last):
  File "/path/to/tests/script.py", line 8, in <module>
    main()
NameError: name 'main' is not defined

案例2:导入为模块

>>> import script
Hello World!

如果你想阻止它被打印,那么将代码的执行部分包装在main函数中,如下所示:

def hello_world():
        print "Hello World!"

def main():
    hello_world()

if __name__ == "__main__":
    main() 

现在,hello_world()仅在您将其作为脚本运行时才被调用(或Hello World!被打印),而不是在将其作为模块导入时。

答案 1 :(得分:0)

see here有关if __name__ == "__main__"的更多信息,但快速摘录

  

在执行代码之前,它将定义一些特殊变量。例如,如果python解释器将该模块(源文件)作为主程序运行,则它将特殊__name__变量设置为值"__main__"。如果从其他模块导入此文件,则__name__将设置为模块的名称。

因此,if __name__ == "__main__"块中包含的任何代码只有在您调用python mymodule.py时才会运行。如果您拨打python importsmymodule.py,它将无法运行。

至于你的具体问题,没有看到计算器模块的代码,这是不可能的,但是你的脚本中的某些调用计算器启动似乎是不言而喻的。