Alguém pode me indicar uma configuração de trabalho para usar o babel com o IPython?
Estou testemunhando um comportamento de indentação estranho quando tento definir funções. Isso acontece independentemente de eu especificar ou não o --classic
sinalizador org-babel-python-command
. Meu comando atual (executando o linux com o Emacs 24.4):
(setq org-babel-python-command
"ipython --pylab=qt4 --pdb --nosep --classic --no-banner --no-confirm-exit")
Isso não funciona com definições de função.
#+BEGIN_SRC python :session *Broken IPython* :results output pp
def g(x, lst):
if isinstance(x, float):
x = x + 0
return [item + x for item in lst]
#+END_SRC
Isso também não parece relacionado --classic
, pois recebo o mesmo erro:
Pontos de bônus se você tiver uma configuração de trabalho que não me force a usar, --classic
como eu gosto da formatação da interface "moderna".
Atualizar
O uso do comando magic permite definir funções e avaliar uma sessão, mas não consigo obter uma saída de valor sem uma. Em vez disso, recebo:
#+BEGIN_SRC python :results output
def f(x):
return x + 2
f(2)
#+END_SRC
#+RESULTS:
: >>> ... ... >>> 4
: >>>
#+BEGIN_SRC python :results value
def f(x):
return x + 2
f(2)
#+END_SRC
#+RESULTS:
Nenhum resultado é retornado, aparentemente porque todo >>>
o resultado da saída não está sendo analisado corretamente.
:results value
exige que você modifique seu código python adicionando umareturn
declaração explícita ou atribuindo a uma variávelfoo
e adicionando:return foo
ao cabeçalho. Mas mesmo com essas correções, não funcionará no ipython - veja meu segundo comentário na minha resposta abaixo.