मैं ज्यूपिटर नोटबुक में फ़ंक्शन say_hello
को कॉल करना चाहता हूं।
def say_hello():
print('hello')
%%javascript
//What have been tried
// Method 1
var kernel = IPython.notebook.kernel;
kernel.execute("say_hello()", {"output": callback});
// Method 2
Jupyter.notebook.kernel.execute("say_hello()")
दोनों विधियां ब्राउज़र कंसोल में ReferenceError
फेंकती हैं।
VM5326:7 Uncaught ReferenceError: IPython is not defined
at send_message (<anonymous>:7:22)
at onClickSendMessage (<anonymous>:12:9)
at HTMLButtonElement.onclick (app.ipynb:1)
संस्करण: जुप्टरलैब 3.5, आईपीथन 7.16, पायथन 3.9.1
1 उत्तर
आपको जो ReferenceError
मिल रहा है, वह Jupyter और IPython ग्लोबल्स के Jupyter Lab में उपलब्ध नहीं होने के कारण है। आपको एक JupyterLab एक्सटेंशन लिखना स्वयं करना होगा।
हालांकि ये चीजें जुपिटर नोटबुक में काम करती हैं। आपके द्वारा आजमाए गए दोनों तरीके एक अच्छी शुरुआत है लेकिन इसमें कुछ सुधार की आवश्यकता है।
हमें 3 सेल चाहिए - पायथन, एचटीएमएल, और जेएस एक।
- आइए केवल उस विधि को परिभाषित करें जिसे हम JS से पायथन में लागू करना चाहते हैं।
def say_hello():
print('hello')
- हमें एक सेल आउटपुट बनाने की जरूरत है, जहां जेएस निष्पादन के परिणाम लिख रहा होगा।
%%html
<div id="result_output">
- हम पायथन फ़ंक्शन को निष्पादित करते हैं, और निष्पादन परिणाम को कॉलबैक में संभालते हैं। कॉलबैक से, हम परिणाम टेक्स्ट को उस आउटपुट में भरेंगे जो हमने ऊपर बनाया था।
%%javascript
const callbacks = {
iopub: {
output: (data) => {
// this will print a message in browser console
console.log('hello in console')
// this will insert the execution result into "result_output" div
document.getElementById("result_output").innerHTML = data.content.text
}
}
};
const kernel = Jupyter.notebook.kernel
kernel.execute('say_hello()', callbacks)
कुछ नोट:
- आपकी दूसरी विधि काफी अच्छी होगी यदि आपको परिणाम देखने की आवश्यकता नहीं है, निष्पादन निष्पादित किया गया है, केवल कर्नेल से परिणाम नियंत्रित नहीं होते हैं (आप वेबसोकेट अनुरोध संदेशों में ब्राउज़र devtools में नेटवर्क टैब में देख सकते हैं)
- अपनी विधि 1 में आप
callback
का उपयोग करते हैं, लेकिन आप इसे परिभाषित नहीं करते हैं - इससे दूसराReferenceError
const
का उपयोग करना बेहतर है JS . मेंvar
का उपयोग करने के बजायJupyter.notebook.kernel
IPython.notebook.kernel
के समान है
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
print
औरreturn
में समस्या हो रही है। कारण, मुझे लगता है कि आपकी विधि 2 में आपprint
जैसे स्रोत कोड चला रहे हैं। और,say_hello
कमांड में आपprint
फ़ंक्शन का भी उपयोग कर रहे हैं। इसलिए, मुझे लगता है कि यदि आपsay_hello
कमांड मेंprint
के बजायreturn
लिखते हैं। मुझे लगता है यह उचित होगा...IPython
औरJupyter
ऑब्जेक्ट तक नहीं पहुंच सकता।