Skip to content

pasting_code_snippets

在交互式工作时,一项常见的任务是从网站、文档或其他 Python 会话中复制代码示例,然后将其粘贴到当前的 IPython 或 Jupyter 会话中。IPython 在处理这些示例中常见的提示符前缀时非常智能。

如果直接从标准的 Python REPL(读取-求值-打印循环)会话复制代码,包括 >>> 和 ... 提示符,IPython 在粘贴代码时会自动过滤掉这些内容。

考虑从标准 Python shell 复制的以下代码:

>>> for i in range(3):
... print(f"Number: {i}")
...

如果将其直接粘贴到 IPython 单元格中:

# Pasted content in IPython cell:
>>> for i in range(3):
... print(f"Number: {i}")
...

IPython 将执行它,就像您输入了以下内容一样:

for i in range(3):
print(f"Number: {i}")

输出:

Number: 0
Number: 1
Number: 2

从其他 IPython/Jupyter 会话 (In [...]、...:) 粘贴

Section titled “从其他 IPython/Jupyter 会话 (In [...]、...:) 粘贴”

类似地,当从另一个 IPython 会话或 Jupyter Notebook 粘贴代码时,IPython 可以处理其自身的输入提示符 (In [N]:) 和续行提示符 (...: 或 .:)。

假设您从另一个 IPython 会话复制以下内容:

In [1]: def greet(name):
...: print(f"Hello, {name}!")
...:
In [2]: greet("Alice")

将其粘贴到新的 IPython 单元格中将正确地定义函数然后调用它,并过滤掉 In [...] 和 ...: 前缀。

# Pasted content in IPython cell:
In [1]: def greet(name):
...: print(f"Hello, {name}!")
...:
In [2]: greet("Alice")
# Output:
Hello, Alice!

IPython 还提供与粘贴相关的魔术命令(magic commands),尽管直接粘贴通常就足够了:

  • %paste:粘贴剪贴板内容,尝试与智能过滤提示符相同的功能。
  • %cpaste:打开一个特殊的提示符,您可以在其中粘贴代码。它允许您在执行之前审查/编辑代码。通过在单独的一行上键入 -- 或按 Ctrl-D 来结束。
# Example using %cpaste
# 示例使用 %cpaste
In [3]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
# 正在粘贴代码;在单独的一行上输入 '--' 以停止或使用 Ctrl-D。
:>>> def add(x, y):
:... return x + y
:--
In [4]: add(5, 3)
Out[4]: 8

这种智能粘贴功能极大地简化了尝试在线找到的或同事分享的代码示例的过程,使得 IPython 和 Jupyter 在交互式探索和学习方面非常方便。