[emacs] org-babel -python
setting emacs init file
(org-babel-do-load-languages
'org-babel-load-languages
'((python . t)))
default usage
다음과 같이 src code block을 만든다. 코드를 입력한다.
#+BEGIN_SRC python
a = 3
#+END_SRC
그리고 C-c c 를 눌러서 실행한다. 그러면 None이라는 결과가
나온다. org mode에서 code block은 함수와 같다. code block은 python
함수이고 함수를 실행하면 None이다. a값을 출력할 수 있을까?
a=3
return a
return문을 사용하면 함수의 결과가 return되고 return된 값을 출력한다. 또 다른 예를 보자.
#+BEGIN_SRC python
a = 3
print(a)
#+END_SRC
return문을 사용하지 않고 print()를 사용해서 출력하려고 한다. 그런데 a값은 출력되지 않는다. 왜냐면 print()는 IO를 사용할뿐 함수의 return값이 아니기 때문이다. 즉 print를 실행한다고 해서 함수가 종료되지 않는다. print는 함수의 return값이 아니다. print문의 출력결과를 보기 위해선 다음과 같이 해야 한다.
#+BEGIN_SRC python :results output
a = 3
print(a)
#+END_SRC
:results 라는 argument에 output이라는 값을 줘야 한다. python에 보면
default argument 라고 있다. 동일하다. :result는 default
argument이고, :result value 에서 value가 :result의 값이다. value
mode라고 말하는데, value mode는 return을 통해서 결과값을 출력할 수
있다. print와 같이 I/O를 사용해서 출력하기 위해선, output mode를
사용해야 한다.
session
session은 code block을 연결시켜준다. code block이 2개있다고 할때, 2개는 모두 독립적이다. 2개의 code block의 실행은 새로운 python interpreter에 의해서 evaluate되기 때문에 연관관계가 없다. 그런데 한개의 python interpreter를 사용한다면 source code block에서 함수를 정의한 후 다른 source code block에서 함수를 호출하는게 가능해 진다. 그런데 이 기능을 이용하려는 것은 아니고, session을 사용하면, 위에서 return을 통해서 마지막 값을 출력하는 것을 간단히 할 수 있다.
#+BEGIN_SRC python :session
a = 3
#+END_SRC
위와 같이 하면 return문 없이도 a값이 출력된다.
exports
code block을 html로 변환시에 code는 출력이 되지만, 실행결과인 result는 출력되지 않는다. 이것은 :exports code로 되어 있기 때문이다. :exports라는 default argument에는 code와 results, both의 값을 가질수 있는데, code로 세팅되어 있다. 그래서 보통 both를 해서 사용한다.
요약
일반적인 code block은 다음과 같이 사용한다.
#+BEGIN_SRC python :results output :exports both
#+END_SRC
나는 이것을 yasnippet에 추가했다.