在Python模块中是否有相当于C的main()?

时间:2016-05-29 13:16:05

标签: python

我正在创建一个Python模块mymodule.py,我需要在导入时运行一个函数。该功能不应由用户运行,只需要正确启动模块。

由于它是一个模块,因此无法工作:

if __name__ == '__main__':
    _main()

我想关注PEPs,我只是想知道是否在Python模块中有相同的C&#39主?(

...或者我是否应该直接编写初始化代码(不作为函数),或者内联函数调用。

3 个答案:

答案 0 :(得分:4)

未加入函数的代码将在文件加载(一次)时运行。这可能就是你想要的:

def some_function():
    pass


def other_function():
    pass

init_value = 0    # This code here is run immediately.
buffer = None

答案 1 :(得分:1)

导入时运行一个函数并不等同于C main()。执行程序时会运行C main()

导入模块时,将执行顶层(即不在函数中)的Python模块中的所有内容。例如,如果这是您的模块内容:

def _on_import():
    pass  # do something
_on_import()

然后在导入模块时执行_on_import()

当你的模块看起来像这样:

def main():
    pass  # do something
if __name__ == '__main__':
    main()

然后在将python模块作为脚本运行时执行main()(例如,如果您的模块位于文件foo.py中并且您运行python foo.py)。这基本上相当于C' main()

答案 2 :(得分:0)

是的,有一个顶级功能就像一个主要功能,如下所示:

    def interact():
        # Your code which handles all the rest of the functions
        # For example
        print('Welcome to this program!')
        filename = input('Please enter the data source file: ')
        load_data(filename)
        ......

然后在你脚本的底部做你正在做的事情:

    if __name__ == '__main__':
        interact()

如果要将其他文件导入程序,例如mymodule.py,请执行以下操作:

    from mymodule import *

或者,您可以像这样测试函数:

    if __name__ == "__main__":
        print test_the_function(123, 456)

导入mymodule时,代码会像以前一样运行,但是当我们到达if语句时,Python会查看模块的名称。由于导入了模块,因此我们通过导入模块时使用的名称知道该模块,因此__name__mymodule。因此,永远不会达到print语句。

关于python的美妙之处在于它不像Cs main()那样工作。你刚开始输入,你已经编写了第一个程序。 python的简单性使它如此美丽,我不会尝试将它与C进行比较,它只是不起作用。

如果有关于python main()的一些有用信息,你也可以查看这个网站:

https://wiki.python.org/moin/Asking%20for%20Help/Do%20you%20need%20a%20int%20main()%20like%20you%20do%20in%20c%2B%2B