Emacs组织模式:执行简单的python代码
如何在Emacs的组织模式下执行非常简单的Python代码 第一个示例运行良好,但我无法使其提供最简单的计算结果:Emacs组织模式:执行简单的python代码,python,emacs,org-mode,Python,Emacs,Org Mode,如何在Emacs的组织模式下执行非常简单的Python代码 第一个示例运行良好,但我无法使其提供最简单的计算结果: ; works #+begin_src python def foo(x): if x>0: return x+10 else: return x-1 return foo(50) #+end_src #+RESULTS: : 60 ; does not work #+begin_src python 1+1 #+end_src #+RESU
; works
#+begin_src python
def foo(x):
if x>0:
return x+10
else:
return x-1
return foo(50)
#+end_src
#+RESULTS:
: 60
; does not work
#+begin_src python
1+1
#+end_src
#+RESULTS:
: None
; does not work
#+begin_src python
print(1+1)
#+end_src
#+RESULTS:
: None
我使用以下行设置组织模式:
;; enable python for in-buffer evaluation
(org-babel-do-load-languages
'org-babel-load-languages
'((python . t)))
;; all python code be safe
(defun my-org-confirm-babel-evaluate (lang body)
(not (string= lang "python")))
(setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate)
获得成功的机会很多
源块的结果-输出
和值
。你把它们弄混了,所以麻烦就来了
第一个街区可以
要修复第二个块,请执行以下操作:
#+begin_src python :results value
return 1+1
#+end_src
要修复第三个块,请执行以下操作:
#+begin_src python :results output
print 1+1
#+end_src
当输出模式为值时
必须返回
。就像你那样把它放在那里
使用1+1
不行。
在第三个会话中,您希望将结果打印输出,但不希望打印默认会话
设置为值
(我的默认值为输出
btw)
关于巴贝尔评估的这一点与问题无关。
我只是将它设置为
nil
您可能仍然会遇到诸如空行导致函数定义错误之类的问题。解决方案在中给出。我也在下面发了帖子
(setq org-babel-python-command "ipython3 --no-banner --classic --no-confirm-exit")
;; use %cpaste to paste code into ipython in org mode
(defadvice org-babel-python-evaluate-session
(around org-python-use-cpaste
(session body &optional result-type result-params) activate)
"Add a %cpaste and '--' to the body, so that ipython does the right thing."
(setq body (concat "%cpaste\n" body "\n--"))
ad-do-it
(if (stringp ad-return-value)
(setq ad-return-value (replace-regexp-in-string "\\(^Pasting code; enter '--' alone on the line to stop or use Ctrl-D\.[\r\n]:*\\)" "" ad-return-value))))
尝试
返回打印(1+1)
可能吗?这个返回值
在原始代码中似乎是“额外的”(在函数之外)。效果很好@bowen.li,你能用matplotlib进行内联打印吗?