Python nhúng java

Javabridge tải một lớp Java, org. hồ sơ di động. javabridge. CPython, có thể được sử dụng để thực thi mã Python. Lớp này có thể được sử dụng trong mã Java được gọi từ trình thông dịch Python hoặc nó có thể được sử dụng trong Java để chạy Python nhúng trong Java

lớp org.cellprofiler.javascript.CPython []

Lớp CPython liên kết trình thông dịch Python với JVM và cung cấp khả năng thực thi các tập lệnh Python

exec []Tranh luận
  • tập lệnh – Tập lệnh Python để thực thi
  • locals – Bản đồ tên của đối tượng Java trong bối cảnh thực thi Python tới chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi cục bộ. Giá trị null có thể được sử dụng nếu không cần xác định cục bộ
  • toàn cầu – Bản đồ tên của đối tượng Java với chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi toàn cầu. Nếu một giá trị null được sử dụng, ____ _ _ _ _ _ mặc định là toàn cầu dựng sẵn

exec[] thực thi tập lệnh được truyền trong trình thông dịch Python. Trình thông dịch thêm các toàn cầu dựng sẵn vào các toàn cầu được truyền vào, sau đó thực thi tập lệnh. Cùng một bản đồ có thể được sử dụng cho cả địa phương và toàn cầu - chế độ này có vẻ quen thuộc hơn với những người thường xuyên viết mã bằng Python và mong đợi câu lệnh import có tác dụng toàn cầu

Không có phương pháp eval. Bạn có thể truy xuất các giá trị bằng cách chuyển một đối tượng vùng chứa, chẳng hạn như một mảng hoặc bản đồ làm một trong các đối tượng cục bộ và bạn có thể đặt các phần tử trong đối tượng với các giá trị được trả về

Thí dụ

class MyClass {
    static final CPython cpython = CPython[];

    public List whereIsWaldo[String root] {
         ArrayList result = new ArrayList[];
         Hashtable locals = new Hashtable[];
         locals.put["result", result];
         locals.put["root", root];
         StringBuilder script = new StringBuilder[];
         script.append["import os\n"];
         script.append["import javabridge\n"];
         script.append["root = javabridge.to_string[root]"];
         script.append["result = javabridge.JWrapper[result]"];
         script.append["for path, dirnames, filenames in os.walk[root]:\n"];
         script.append["  if 'waldo' in filenames:"];
         script.append["     result.add[path]"];
         cpython.exec[script.toString[], locals, null];
         return result;
    }

}

execute []

import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
0 là một từ đồng nghĩa với
import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
1 là một từ khóa Python. Sử dụng
import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
0 thay cho
import javabridge

cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][]
d = javabridge.JClassWrapper['java.util.Hashtable'][]
result = javabridge.JClassWrapper['java.util.ArrayList'][]
d.put["result", result]
cpython.execute[
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref[x]\n'
    'javabridge.JWrapper[result].add[ref_id]', d, d]
cpython.execute[
    'import javabridge\n'
    'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n'
    'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n'
    'javabridge.unlock_jref[ref_id]', d, d]
1 để gọi Python từ CWrapper javabridge cho CPython

Duy trì các tham chiếu đến các giá trị Python

Bạn có thể muốn duy trì các tham chiếu đến các đối tượng Python trong quá trình thực thi tập lệnh. Các hàm sau đây cho phép người gọi Java tham chiếu đến giá trị Python [có thể là loại cơ sở hoặc đối tượng] thông qua mã thông báo có thể được trao đổi lấy giá trị bất kỳ lúc nào. Mã Java chịu trách nhiệm quản lý thời gian tồn tại của tham chiếu. Thí dụ

Bạn có thể nhúng Python vào Java không?

Có thể sử dụng lớp này trong mã Java được gọi từ trình thông dịch Python hoặc có thể sử dụng lớp này trong Java để chạy Python nhúng trong Java . Lớp CPython liên kết trình thông dịch Python với JVM và cung cấp khả năng thực thi các tập lệnh Python.

Tôi có thể sử dụng thư viện Java trong Python không?

Một trong những tính năng quan trọng nhất của Jython là khả năng nhập các lớp Java trong chương trình Python. Chúng ta có thể nhập bất kỳ gói hoặc lớp java nào trong Jython, giống như chúng ta làm trong chương trình Java . Ví dụ sau đây cho thấy cách java.

Jython được sử dụng để làm gì?

Jython là một phiên bản của ngôn ngữ lập trình Python chạy trên nền tảng Java. Nó cho phép người dùng viết chương trình bằng Python và biên dịch chúng thành mã byte Java chạy trực tiếp trên Máy ảo Java hoặc JVM .

Làm cách nào để chạy tập lệnh Python bằng Java?

Bắt đầu .
Chèn một đối số Chuỗi sẽ được sử dụng bởi mã Python. Đối số tập lệnh Python của chúng tôi có tên user_name sẽ nhận giá trị của biến tên mã Java của chúng tôi
Thực thi mã Python bằng phương thức exec[]
Nhận giá trị trả về từ Python trở lại Java

Chủ Đề