orgmode 中 python 代码块,如果是 Python 2,可以用:
#+begin_src python :results value
return var
#+end_src
#+results: ...
特别是,如果 var
是一个 list,那么 babel eval 的结果是一个 org table。
但在 python 3 中不能这么用,会报错 'return' outside function
,请问 python 3 中的等价用法是什么?
或者换一种问法: python 3 怎样使用 org babel 的 :results value
输出结果?
我这里 return 是没问题的:
M-x eval RET (setq org-babel-python-command “/usr/local/bin/python3”)
#+BEGIN_SRC python :results value
import platform
return platform.python_version()
#+END_SRC
#+RESULTS:
: 3.6.1
#+BEGIN_SRC python :results value
return [1, 2, 3]
#+END_SRC
#+RESULTS:
| 1 | 2 | 3 |
如果不要求一定 :results value
, 可以改为 print:
#+BEGIN_SRC python :results output
print([1, 2, 3])
#+END_SRC
#+RESULTS:
: [1, 2, 3]
1 个赞
twlz0ne:
我这里 return 是没问题的:
奇怪了,难道是我的设置的问题?
你的 python command 用的是 python 呢?还是 ipython?
edit: 抱歉,没仔细看,我用的是 ipython
python
python-shell — python-shell-interpreter
ob-python — org-babel-python-command
这两个可以是不同的版本
在最顶层 return 即使 2.7 也会出错:
⋊> /usr/local/bin/python2
Python 2.7.13 (default, Dec 17 2016, 23:03:43)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> return 1
File "<stdin>", line 1
SyntaxError: 'return' outside function
看来是 org-babel 执行的时候做了处理
1 个赞