从Java调用python函数的不同/更好的方法
我是python的新手,正尝试从java调用python的函数。
我的主要要求是:
- 调用应该是透明的,从某种意义上说,它不应
.py
仅需要修改文件就可以从Java对其进行调用。我可能会得到任何带有某些功能的python文件。我应该能够调用任何这些功能,而无需修改.py
文件。 - 我希望能够同时发送原语类型(的参数
int
,String
,floats
等等)或非原语类型(HashMap
,ArrayList
从Java)来Python函数和接收返回所返回的对象(其原始类型或非原始类型的可能)从蟒到Java。我也使用pandas DataFrame和numpy ndarray,因此也希望能够与Java发送和接收相应的对象。 - 我 最好 还是坚持使用CPython而不是Jython,因为我可能需要使用Jython中可能没有的较新的库。
我在网上找到了几个选项。很少有:
- 通过它我可以调用python函数,而无需对
.py
脚本文件进行任何更改:
def square2(list): squares = []
for i in list:
squares.append(i*i)
return squares
import org.python.util.PythonInterpreter import org.python.core.*;
class JythonTest
{
static main(def args)
{
PythonInterpreter pi = new PythonInterpreter()
pi.exec("from py1 import square2")
PyFunction pf = (PyFunction)pi.get("square2")
println pf.__call__(new PyList([1,2,3,4]))[2] //9
}
}
我非常有能力满足我的需求。但是它不是CPython。
:这与PythonInterpreter非常相似。但是它的Jython又来了。而且,与PythonInterpreter不同,我们不能使用Jython 2.5+,也不能直接访问PyObjects。因此,可以很好地关闭此选项。
:无法找到示例,与Jython PythonInterpreter一样最小
- 。但是没有给出太多有关从java调用python的信息,因此我可以得出结论是否可以满足我的上述要求。谁能对此给予更多的了解?更具体地说,如果我们可以编写与Jython PythonInterpreter中的代码一样少的代码。
- :但是,快速浏览之后,我感到无法像Jython PythonInterpreter那样编写最少的代码。我也觉得该项目没有得到开发。是吗?
如果我正确理解上述所有方法,似乎Jython PythonInterpreter是最佳选择。我在抓住错误时是否犯了错误?还有其他更好的选择吗?
回答:
目前尚无此问题的答案。使用CPython依赖于Python字节码的执行,这反过来又要求将Python解释器嵌入执行环境中。由于没有Java运行时附带嵌入式Python解释器,因此看起来Jython确实是最好的答案。
有时您想要的答案不可用!
以上是 从Java调用python函数的不同/更好的方法 的全部内容, 来源链接: utcz.com/qa/430888.html