如何在ipython笔记本中的javascript代码中使用python定义的变量?

时间:2014-10-05 22:01:21

标签: ipython ipython-notebook

假设我使用Ipython笔记本对Scipy工厂进行了复杂的数值计算。现在,我想通过Javascript中的代码(仍然在IPYNB中)调用Scipy计算得到的变量。

以下是我愿意完成的事情的简单说明:

# Get a vector of 4 normal random numbers using numpy - the variable 'rnd'
import numpy as np
mu, sig = 0.05, 0.2
rnd = np.random.normal(loc=mu, scale=sig, size=4)

现在,我想在Javascript中使用上面的变量rnd,用于说明目的:

%%javascript
element.append(rnd);

上面的行会返回一条消息错误:ReferenceError: rnd is not defined

那么,如何在Ipython Notebook中的javascript代码中使用python变量?

2 个答案:

答案 0 :(得分:5)

使用%%Javascript单元格法术可能无法做到这一点。但是,您可以使用IPython.display.Javascript(...)方法将Python字符串注入浏览器 输出区域。这是对您的代码片段的修改,似乎可以回答您的问题。

from IPython.display import Javascript

import numpy as np
mu, sig = 0.05, 0.2
rnd = np.random.normal(loc=mu, scale=sig, size=4)

## Now, I want to use the variable rnd above in Javascript, for illustrative purpose:

javascript = 'element.append("{}");'.format(str(rnd))

Javascript(javascript)

将此代码粘贴到输入单元格中,每次执行单元格时都会生成一个新的不同数组 随机数将显示在输出单元格中。

(代码使用IPython 2.2版测试)

答案 1 :(得分:4)

任意Python(包括检索变量的值)都可以从IPython中的JavaScript端执行,尽管它有点乱。以下代码适用于IPython 3.1和Python 2.7:

%%javascript
IPython.notebook.kernel.execute(
    "<PYTHON CODE TO EXECUTE HERE>", 
    {
        iopub: {
            output: function(response) {
                // Print the return value of the Python code to the console
                console.log(response.content.data["text/plain"]);
            }
        }
    },
    {
        silent: false, 
        store_history: false, 
        stop_on_error: true
    }
)