2016-05-29 81 views
0

我正在创建一个Python模块mymodule.py,我需要在导入时运行一个函数。该功能不应该由用户运行,只需要正确启动模块。Python模块中是否有C的main()等价物?

因为它是一个模块,这是不行的:

if __name__ == '__main__': 
    _main() 

我想跟进PEPs和我只是想知道如果有C'S main()的一个Python模块中的等价?

...或者如果我应该只是写入初始化代码(不作为函数),或者内联调用函数。

+0

为什么不编写内联代码片段,因为内联代码片段将在导入时处理? – gevorg

+0

调用它时出现了什么问题*不管if __name__ =='__main __''是什么?那不是PEP友好的?它在某些情况下没有做到你想要的吗? –

+2

“在导入时运行函数”和C的main()不等效。 –

回答

4

不缩进功能的代码将在文件加载(一次)时运行。这可能是你想要什么:

def some_function(): 
    pass 


def other_function(): 
    pass 

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

是的,但那些变量将暴露在模块'dir(mymodule)'中。我真的不想要那样。 – fredrik

+0

然后将代码放在'_main'函数中(以避免泄漏变量)并从模块的顶层调用它。 –

+3

在这种情况下,您可以定义函数并将其内联。 – gevorg

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语句,巨蟒看起来看到什么名字模块有。由于模块是导入的,我们通过导入它时使用的名称知道它,所以__name__mymodule。因此,打印语句永远不会到达。

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

您还可以检查这个网站了,如果有关于蟒蛇主(一些有用的信息):

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

+0

是的,但OP希望即使在导入时也能调用该函数。我们导入模块时这不起作用。 – formatkaka

+0

是的,如果没有看到OP的代码,很难知道问题是什么。 – RoadRunner

+0

认真,冷静,你们是无情的。 – RoadRunner

1

运行在进口功能并不等同于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()

相关问题