IPython시스템에서 제공하는 add-on function들이며
접두사로 % 또는 %%를 사용하는 키워드들로 사용된다
%
의 경우 한 줄의 코드에서만 실행되며%%
의 경우 여러 줄, 즉 한 셀의 내용 전체에서 실행된다이게 도대체 무슨 말일까? 일단 Magic Command가 어떻게 사용되는지 보면 바로 이해가 갈 것이다
%alias
시스템 명령어를 정의할 수 있다
%alias alias_name cmd
와 같이 정의하면 된다
아래 예를 보자
In [1]: alias bracket echo "Input in brackets: <%l>"
In [2]: bracket hello world
Out [2]: "Input in brackets: <hello world>"
In [3]: alias parts echo first %s second %s
In [4]: %parts hello world
Out [4]: first hello second world
%l은 라인 전체, %s는 단어 하나를 포맷팅한다. %l와 %s는 상호 베타적이므로 하나의 명령어에는 둘 중 하나만 사용될 수 있다
In [5]: alias
Total number of aliases: 8
Out [5]:[('bracket', 'echo "Input in brackets: <%l>"'),
('copy', 'copy'),
('ddir', 'dir /ad /on'),
('echo', 'echo'),
('ldir', 'dir /ad /on'),
('ls', 'dir /on'),
('mkdir', 'mkdir'),
('parts', 'echo first %s second %s'),
('ren', 'ren'),
('rmdir', 'rmdir')]```
위에서 만든 명령어들이 결과에 포함되어 있다
>### %automagic
- `%` 접두사를 붙이지 않고 Magic Command를 사용하게 해준다
위에서 `%alias` ****를 설명할때, 잘 보면 어떤 경우엔 앞에 %를 붙이기도 하고 안붙이기도 했다
이는 기본적으로 Automagic이 ON 상태이기 때문이다
만약 `%automagic`으로 해당기능을 끄면 반드시 앞에 `%` 를 붙여야 한다
```python
In [6]: %automagic
Automagic is OFF, % prefix IS needed for line magics.
In [7]: alias
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-36-2ba6570be30e> in <module>
----> 1 alias
NameError: name 'alias' is not defined
In [8]: %automagic
Automagic is ON, % prefix IS NOT needed for line magics.
In [9]: alias
Out [9]:[('bracket', 'echo "Input in brackets: <%l>"'),
('copy', 'copy'),
('ddir', 'dir /ad /on'),
('echo', 'echo'),
('ldir', 'dir /ad /on'),
('ls', 'dir /on'),
('mkdir', 'mkdir'),
('parts', 'echo first %s second %s'),
('ren', 'ren'),
('rmdir', 'rmdir')]
참고로 System Command < Magic Command < Python Normal Variables 순으로 우선순위가 결정되기 때문에, 파이썬에 같은 이름의 변수나 함수가 있다면 그쪽이 우선적으로 실행된다. 이를 방지하기 위해선 같은이름의 파이썬 변수, 함수등을 삭제하거나, %
키워드를 사용하여 구분해주면 된다
%run
test.py
def sayHello(x):
print("Hi, I'm {0}".format(x))
print("Excuse me?")
a = 42
-----------------------------------------------
In [10]: %run test.py
Excuse me?
한 번 실행시킨 파이썬 스크립트 안에 있는 변수나 함수 또한 사용 가능하다
In [11]: sayHello("Harry")
Hi, I'm Harry
In [12]: a
Out [12]: 42
%timeit, %time
%time
은 코드가 실행되는데 걸리는 시간을 측정해준다
In [13]: %time sum(range(100))
Wall time: 641 µs
Out [13]: 4950
%timeit
은 보다 복잡한 조작을 가능하게 해준다(자세한것은 %timeit?
참조)
In [14]: %%timeit
a = 1
b = 1
sum = 0
for i in range(10):
sum += a
a,b = b, a+b
2.33 µs ± 798 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit
은 주어진 코드를 여러번 실행해보고 그 평균시간을 알려준다
%pylab
numpy, matplotlib와같은 모듈을 임포트하고 Jupyter Notebook상에서 인터렉티브하게 동작하도록 한다
간단히 말해서 %pylab
커맨드를 사용하는것은 다음 코드를 실행시키는 것과 같다
import numpy
import matplotlib
from matplotlib import pylab, mlab, pyplot
np = numpy
plt = pyplot
from IPython.display import display
from IPython.core.pylabtools import figsize, getfigs
from pylab import *
from numpy import *```
- `--no-import-all` 옵션을 주면 마지막 `from pylab import *` 과 `from numpy import *` 는 적용되지 않는다
>### %matplotlib
- matplotlib를 인터랙티브하게 동작하도록 만들어준다
Jupyter로 데이터 엔지니어링좀 만져봤다면 `%matplotlib inline` 로 익숙한 Magic일 것이다
`%matplotlib --list` 를 보면 inline 외에도 *'tk', 'gtk', 'gtk3', 'wx', 'qt4', 'qt5', 'qt', 'osx', 'nbagg', 'notebook', 'agg', 'svg', 'pdf', 'ps', 'inline', 'ipympl', 'widget'* 등의 gui를 사용할 수 있다
>### %magic, %lsmagic
- `%magic` 는 Magic Command에 대한 정보를 제공하며
- `%lsmagic`은 현재 사용 가능한 Magic Command들을 보여준다
>### ?
- Magic Command 뒤에 붙이면 해당 Magic에 대한 설명을 보여준다
In [15]: %lsmagic?
Docstring: List currently available magic functions.
File: c:\program files (x86)\microsoft visual studio\shared\anaconda3_64\lib\site-packages\ipython\core\magics\basic.py
---
이 포스트는 [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do), [IPython - Built-in magic commands](https://ipython.readthedocs.io/en/stable/interactive/magics.html)의 내용을 바탕으로 작성되었다
또한 이 글은 Jupyter Notebook에서 사용할 수 있는 Magic Command(중 아주 약간)만을 설명했다. Jupyter Notebook과 IPython은 약간의 차이점이 있기 때문에 IPython에는 있지만 Jupyter에는 없는 Magic Command들도 있다