我读了下面给出的答案:
在创建模块时,将所有代码放在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()
的准确方法吗?
答案 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