IPython 中的单元格魔法 jupyter

IPython 中的单元格魔法 jupyter,第1张

1 单元格魔法介绍 IPython 中的单元格魔法

Ipython 拥有一些被称为魔法(magic)的命令,这些命令独立于python语法,且用户可扩展出新的命令。“魔法”的设计初衷在于可以在Ipython中交互式地执行一些命令(比如执行某些系统命令),所以它遵循了命令行的一些惯例,
比如:使用空格来分割参数,“-”来表示选项等‘ 魔法有二种:
1行魔法(line magic):以“%”为前缀,而且整个命令(包含参数)不能跨行。
2 单元魔法(cell magic):以“%%”为前缀,而且整个单元格都被认为是一个命令。注意,单元格魔法必须从单元格的第一行开始,而且一般而言,一个单元格内仅能有一个单元格魔法。某些单元格魔法因为其特殊的 *** 作机制,使得它们可以被叠加,但这种情况罕见,遇见单独了解即可。 %lsmagic 会打印出当前所有可用的魔法,包含行魔法和单元格魔法:

2 常见单元格魔法

%lsmagic显示所有单元格魔法

%lsmagic

Available line magics:
%alias  %alias_magic  %autoawait  %autocall  %automagic  %autosave  %bookmark  %cd  %clear  %cls  %colors  %conda  %config  %connect_info  %copy  %ddir  %debug  %dhist  %dirs  %doctest_mode  %echo  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %macro  %magic  %matplotlib  %mkdir  %more  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %pip  %popd  %pprint  %precision  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %ren  %rep  %rerun  %reset  %reset_selective  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode

Available cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%cmd  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%markdown  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.

当不知道某些方法作用时,可使用%ls?查看帮助

%ls
驱动器 C 中的卷是 Windows
 卷的序列号是 ECA0-AFCF

 C:\Users\Admin\Desktop\py_notebook 的目录

2022/04/25  17:40              .
2022/04/25  17:40              ..
2022/04/25  17:13              .ipynb_checkpoints
2022/04/25  17:28             3,002 Untitled.ipynb
2022/04/25  17:40             7,796 Untitled-Copy1.ipynb
               2 个文件         10,798 字节
               3 个目录 134,805,385,216 可用字节

在Ipython中画图
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

一些简单的单元格魔法¶
为代码执行计时:’timeit‘这个魔法有行版本,也有单元格版本
平均时间输出
%timeit np.linalg.eigvals(np.random.rand(100,100))
4.94 ms ± 89.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit a=np.random.rand(100,100)
np.linalg.eigvals(a)
4.81 ms ± 157 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%capture capt
import sys
print('hello stdout')
print(sys.stderr,'and stderr')
capt.stdout,capt.stderr
capt.show()
capt.show()
1
capt.show()
hello stdout
<_io.StringIO object at 0x000002031BE21CA0> and stderr

%%writefile魔法非常有用,它将单元格的内容写入指定文件中:

%%writefile foo.py
print('hello foo')
Writing foo.py
%run foo
hello foo
3 运行其它脚本语言

在其它解释中执行代码的魔法
IPyyhon有一个%%script的单元格魔法,它可以让你在一个子进程中运行单元格内的其它解释器,如:bash,ruby,perl,zsh,R等。当然,前提是你的系统总必须有这写解释器。

告诉%%script解释器的路径,然后在单元格中写下想要运行的代码即可。

%%script python
import sys
print ('hello from Python {}'.format(sys.version))
hello from Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]

IPython 也为一些常用的解释器设置了一些快捷名,如bash,ruby,perl等
他们均等价于%%script

%%ruby
puts "hello from $Ruby #[RUBY_VERSION]"

%%bash
echo "hello from $BASH"
Couldn't find program: 'bash'

这些都是新开一个子进程运行

捕获输出 上面的子进程的输出可以被捕获并赋值给python的变量:

%%script python --out output --err error
import sys
print("from stdout")
print(sys.stderr,'from stderr')

后台脚本
增加–bg标志即可让子进程在后台执行而不阻塞我们的交互界面
当然当我们采取这种后台输出的方式时,子进程的输出被自动忽略,除非我们像上面一样指定–out/err 来主动捕获

%%script python --bg --out subprocess_out
import time
for i in range(10):
    time.sleep(5)
    print('line #',i)
subprocess_out

for line in subprocess_out:
    print(line)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/786980.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存