我正在创建一个Python模块mymodule.py
,我需要在导入时运行一个函数。该功能不应由用户运行,只需要正确启动模块。
由于它是一个模块,因此无法工作:
if __name__ == '__main__':
_main()
我想关注PEPs,我只是想知道是否在Python模块中有相同的C&#39主?(
...或者我是否应该直接编写初始化代码(不作为函数),或者内联函数调用。
答案 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()的一些有用信息,你也可以查看这个网站: