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