mytc的交互式工作IPython魔法命令接口。
项目描述
mypyc_ipython
IPython魔法命令接口,用于与从类型注释Python编译到C扩展的编译器mypyc进行交互式工作。
安装
支持的Python版本为3.6或更高版本。
$ pip install mypyc-ipython
用法
您可以使用此库如%%cython
魔法命令。
- 执行
%load_ext mypyc_ipython
以启用魔法。 - 在
%%mypyc
代码单元中编写代码。
In [1]: %load_ext mypyc_ipython
In [2]: %%mypyc
...: def my_fibonacci(n: int) -> int:
...: if n <= 2:
...: return 1
...: else:
...: return my_fibonacci(n-1) + my_fibonacci(n-2)
...:
In [3]: my_fibonacci(10)
Out[3]: 55
In [4]: def py_fibonacci(n: int) -> int:
...: if n <= 2:
...: return 1
...: else:
...: return py_fibonacci(n-1) + py_fibonacci(n-2)
...:
In [5]: py_fibonacci(10)
Out[5]: 55
In [6]: %load_ext cython
In [7]: %%cython
...: cpdef int cy_fibonacci(int n):
...: if n <= 2:
...: return 1
...: else:
...: return cy_fibonacci(n-1) + cy_fibonacci(n-2)
...:
In [8]: cy_fibonacci(10)
Out[8]: 55
In [9]: %timeit py_fibonacci(10)
10.3 µs ± 30.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [10]: %timeit my_fibonacci(10)
848 ns ± 5.82 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [11]: %timeit cy_fibonacci(10)
142 ns ± 1.18 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [12]:
单元格的内容将使用代码的哈希值作为文件名写入目录 IPYTHONDIR/mypyc
中的 .py
文件。然后该文件被mytc化并编译。生成的模块将被导入,并将其所有符号注入到用户命名空间中。
如果您想禁用缓存,可以使用如下的 --force
选项
In [2]: %%mypyc --force
...: def my_fibonacci(n: int) -> int:
...: if n <= 2:
...: return 1
...: else:
...: return my_fibonacci(n-1) + my_fibonacci(n-2)
作者
Masashi Shibata (@c-bata)
许可
MIT许可