在main()函数中导入具有其所有函数的模块

时间:2016-11-24 07:43:38

标签: python main

我读了下面给出的答案:

Why use def main()?

在创建模块时,将所有代码放在main()函数中以避免在导入时执行它似乎是更好的做法(?)。

但与此同时,当我将所有函数放入main()并且我想将其导入另一个程序时,我将如何调用所有这些函数?

这样做似乎适得其反,但显然我理解错了,所以我感谢我能得到的任何帮助。

编辑:所以,如果我理解它,请告诉我,我们不会在main()中放置任何实际函数,它们是单独的函数。唯一能进入__main__部分的是什么?例如:

计划test.py

def my_function():
    print('Hello')

def my_function2(num):
    return num*num

print('Hi')

修改test.py

def my_function():
    print('Hello')

def my_function2(num):
    return num*num

def main():    #so it doesn't execute when imported
    print('Hi')

这是您使用main()的准确方法吗?

2 个答案:

答案 0 :(得分:4)

public class CustomBeanPostProcessor implements BeanPostProcessor { public static Map<String, ArrayList<Object>> objectMap; public Object postProcessBeforeInitialization(Object o, String string) throws BeansException { return(o); } public Object postProcessAfterInitialization(Object o, String string) throws BeansException { if(objectMap == null) { objectMap = new HashMap<String, ArrayList<Object>>(); } if(null == o) { return(o); } if(AopUtils.isAopProxy(o) && o instanceof Advised) { Class targetClass = ((Advised)o).getTargetClass(); Object object = null; try { Object target = ((Advised)o).getTargetSource().getTarget(); object = targetClass.cast(target); for(Field field:object.getClass().getDeclaredFields()) { Value value = field.getAnnotation(Value.class); if(null != value && null != value.value() && value.value().replace("${", "").replace("}", "").length() > 0) { updateObjectMap(value.value().replace("${", "").replace("}", ""), object); } } } catch(Exception ex) { ex.printStackTrace(); } } else { for(Field field:o.getClass().getDeclaredFields()) { Value value = field.getAnnotation(Value.class); if(null != value && null != value.value() && value.value().replace("${", "").replace("}", "").length() > 0) { updateObjectMap(value.value().replace("${", "").replace("}", ""), o); } } } return(o); } public static void updateObjectMap(String key, Object object) { ArrayList<Object> objectList = objectMap.get(key); if(null == objectList) { objectList = new ArrayList<Object>(); objectList.add(object); objectMap.put(key, objectList); } else { objectList.add(object); } } public Map<String, ArrayList<Object>> getObjectMap() { return objectMap; } public void setObjectMap(Map<String, ArrayList<Object>> objectMap) { this.objectMap = objectMap; } } 通常调用您的其他功能但不包含它们。您的其他功能将位于main()上方脚本的正文中,并且可以标准方式调用。

因此,您的main()示例可能如下所示:

test.py

答案 1 :(得分:1)

您可以在下面的块中调用要执行的功能。假设函数已在模块顶部定义

if __name__=="__main__":
    call your functions you want to execute