Python交互环境中命令前使用!和%前缀的功能区别是什么
你提到的这两个前缀是IPython/Jupyter 内核专属的特殊语法,原生的 CPython 交互环境并不支持,二者的核心区别如下:
!是 Shell 调用前缀
作用是把后续内容直接传递给你设备的系统默认 Shell(Windows 是 cmd/PowerShell,类 Unix 系统是 bash/zsh 等)执行,所有 Shell 支持的原生命令、第三方工具命令都可以通过这个前缀调用,比如你例子里的ls、unzip都是 Shell 可识别的命令,加!前缀都可以正常运行,执行结果还可以直接赋值给 Python 变量使用。%是 IPython 魔术命令专属前缀
只能调用 IPython 内核预先内置、或是你手动安装的扩展注册过的魔术命令,和系统 Shell 没有直接关联。
你遇到的%ls可以运行,是因为 IPython 本身内置了同名的%ls魔术命令,功能和 Shell 的ls类似,是 IPython 自己实现的逻辑;而%unzip无法运行,是因为 IPython 默认没有内置这个魔术命令,也没有对应的扩展注册过该命令,自然无法识别。
补充说明:魔术命令还分为行魔术(单%开头,仅作用于当前行)和单元魔术(双%%开头,作用于整个代码块),常用的 %timeit(统计单行代码运行耗时)、%%bash(整个代码块都用 bash 执行)、%pwd(输出当前工作路径)都属于魔术命令。如果开启了 IPython 的 automagic 开关(默认开启),常用的魔术命令甚至可以省略 % 前缀直接调用,你直接在单元格输入 ls 就能得到结果,本质调用的是 %ls 而非 Shell 原生的 ls。
内容的提问来源于stack exchange,提问作者James__pxlwk
相关产品推荐
相关产品推荐

