jep invoke 带参数调用怎么写

我网上找到的都是不带参数调用的,带参数的怎么调用?

JavaDiv.py

import sys
import os

def JavaDiv(map):
    return float(map['a'])/float(map['b']);
public class JPython {

    public static String invoke(String dir,String filename,Map paras )
    {
        String result="";
        JepConfig config = new JepConfig();
        config.addIncludePaths(dir);
         try (Interpreter interp = new SubInterpreter(config))
         {
               interp.eval("from "+filename+" import *");
               result = interp.invoke(filename,paras).toString();
           } catch (JepException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return result;        
    }    
}
Map map = new HashMap();

map.put("a",3);
map.put("b",2);
        
       
Double.parseDouble(JPython.invoke("E:\\works\\eclipse\\2018\\Guild2Mod_\\src\\python","JavaDiv", map));

结果

result = interp.invoke(filename,paras).toString();
这里死活就报错
jep.JepException: <class 'TypeError'>: JavaDiv() got an unexpected keyword argument 'a'

我给的参数
image.png
按照这里给的呢,为什么死活报错呢?
感谢。

阅读 1.4k
1 个回答
新手上路,请多包涵

参数个数与参数值对应就行,我也弄了很久
def singular_ratio_check(var):

data = var['data']

   try (Interpreter interpreter = new SharedInterpreter()) {
        Map<String, Object> binding = new HashMap<>();
        binding.put("name", "zhangshan");
        binding.put("age", "18");
        binding.put("data",DoubleStream.of(1.0d,2.0d,3.0d,4.0d).toArray());
        Map<String, Object> param = new HashMap<>();
        param.put("var",binding);

// interpreter.set("name", "zhangshan");
// interpreter.set("age", 18);

        interpreter.runScript("D:\\IdeaProjects\\scheduler\\job-executor\\job-executor-app\\src\\main\\resources\\singular_ratio.py");
        Object result = interpreter.invoke("singular_ratio_check", param);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题