[babel] python 3 代码块与 :results value

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 个赞

奇怪了,难道是我的设置的问题?

你的 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 个赞

看来是这样,谢谢!

多谢提醒,一直以为是一个变量