我正在创建一个Python模块mymodule.py
,我需要在导入时运行一个函数。该功能不应该由用户运行,只需要正确启动模块。Python模块中是否有C的main()等价物?
因为它是一个模块,这是不行的:
if __name__ == '__main__':
_main()
我想跟进PEPs和我只是想知道如果有C'S main()的一个Python模块中的等价?
...或者如果我应该只是写入初始化代码(不作为函数),或者内联调用函数。
我正在创建一个Python模块mymodule.py
,我需要在导入时运行一个函数。该功能不应该由用户运行,只需要正确启动模块。Python模块中是否有C的main()等价物?
因为它是一个模块,这是不行的:
if __name__ == '__main__':
_main()
我想跟进PEPs和我只是想知道如果有C'S main()的一个Python模块中的等价?
...或者如果我应该只是写入初始化代码(不作为函数),或者内联调用函数。
呀有这样一个顶级功能就像是一个主要的,是这样的:
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语句,巨蟒看起来看到什么名字模块有。由于模块是导入的,我们通过导入它时使用的名称知道它,所以__name__
是mymodule
。因此,打印语句永远不会到达。
python的美丽之处在于它不像Cs main()那样工作。你刚刚开始输入,并且你已经编写了你的第一个程序。 Python的简单性使它变得如此美丽,我不会试图与C进行比较,它不会起作用。
您还可以检查这个网站了,如果有关于蟒蛇主(一些有用的信息):
是的,但OP希望即使在导入时也能调用该函数。我们导入模块时这不起作用。 – formatkaka
是的,如果没有看到OP的代码,很难知道问题是什么。 – RoadRunner
认真,冷静,你们是无情的。 – RoadRunner
运行在进口功能并不等同于C'S main()
。 C的main()
在执行程序时运行。
当导入模块时,会执行顶级(即不在函数中)的Python模块中的所有内容。例如,如果这是你的模块内容:
def _on_import():
pass # do something
_on_import()
然后_on_import()
导入模块时执行。
当你的模块看起来是这样的:
def main():
pass # do something
if __name__ == '__main__':
main()
然后main()
运行Python模块作为脚本执行时(例如,如果你的模块文件foo.py
和运行python foo.py
)。这基本上相当于C的main()
。
为什么不编写内联代码片段,因为内联代码片段将在导入时处理? – gevorg
调用它时出现了什么问题*不管if __name__ =='__main __''是什么?那不是PEP友好的?它在某些情况下没有做到你想要的吗? –
“在导入时运行函数”和C的main()不等效。 –