4

大量示例 Python 代码显示了 Python REPL 的输出,例如:

>>> class eg(object):
...     def __init__(self, name):
...             self.name = name
...     def hi(self):
...             print "Hi %s" % (self.name)
... 
>>> greeter = eg("Bob")
>>> greeter.hi()
Hi Bob
>>> 

现在,您要做的显而易见的事情是运行上面的代码.. 所以,我运行“python”并将上面的文本粘贴到..

>>> >>> class eg(object):
  File "<stdin>", line 1
    >>> class eg(object):
     ^
SyntaxError: invalid syntax
>>> ...     def __init__(self, name):
  File "<stdin>", line 1
    ...     def __init__(self, name):
    ^

密码坏了!?...

为了让它运行,我必须要么..

  • 一次复制并粘贴一行,确保我正确复制所有缩进。如果你搞砸了(比如说,错过了一个领先的空间,你必须重新开始)
  • 使用文本编辑器删除>>>and ...,然后再次粘贴

这不是一个大问题,但是鉴于以这种格式提供了多少示例代码,您必须这样做似乎很奇怪..

4

4 回答 4

9

如何运行/采用“Pythons REPL 的输出”

  • 使用IPython外壳

    In [99]: %cpaste
    Pasting code; enter '--' alone on the line to stop.
    :>>> class eg(object):
    :...     def __init__(self, name):
    :...             self.name = name
    :...     def hi(self):
    :...             print "Hi %s" % (self.name)
    :...
    :>>> greeter = eg("Bob")
    :>>> greeter.hi()
    :--
    Hi Bob
    
  • 使用功能强大的文本编辑器(例如,在EmacsC-x r k中删除矩形区域)

  • 使用doctest模块

首先在没有 shell 提示的情况下进行复制(例如,尽管我不知道如何在 Google Chrome 上执行此操作)。

为什么使用 doctest 格式

将以下内容保存到documentation.txt

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua。Ut enim 广告
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat。

>>> 类例如(对象):
... def __init__(self, name):
... self.name = 名称
...定义嗨(自我):
... 打印 "Hi %s" % (self.name)
...
>>> 迎接者 = 例如(“鲍勃”)
>>> 迎接者.hi()
嗨鲍勃
>>>

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur。Exceptioneur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est
产房。

跑:

$ python -c "import doctest; doctest.testfile('documentation.txt')" -v

输出:

Trying:
    class eg(object):
        def __init__(self, name):
                self.name = name
        def hi(self):
                print "Hi %s" % (self.name)
Expecting nothing
ok
Trying:
    greeter = eg("Bob")
Expecting nothing
ok
Trying:
    greeter.hi()
Expecting:
    Hi Bob
ok
1 items passed all tests:
   3 tests in doctest.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.

如果您在模块末尾添加以下代码段,它将测试其文档字符串中的所有代码:

if __name__=="__main__":
   import doctest; doctest.testmod()

QED

于 2009-03-15T03:36:36.270 回答
2

我不知道是否有一个好的解决方案。理想情况下,有一些方法可以修改解释器的行为以接受这种复制/粘贴输入。以下是一些替代建议:

使用三引号将示例保存为字符串。然后,使用 exec:

>>> def chomp_prompt(s): return '\n'.join(ln[4:] for ln in s.splitlines())
...
>>> dirty = """>>> class eg(object):
... ...     def __init__(self, name):
... ...             self.name = name
... ...     def hi(self):
... ...             print "Hi %s" % (self.name)
... ...
... >>> greeter = eg("Bob")
... >>> greeter.hi()
... """
>>> clean = chomp_prompt(dirty)
>>> exec clean
Hi Bob
>>>

我的解决方案不仅都适合一行(因此您可以轻松地将其复制/粘贴到解释器中),它适用于上面的示例:D:

>>> s = r'''>>> def chomp_prompt(s): return '\n'.join(ln[4:] for ln in s.splitlines())
... ...
... >>> dirty = """>>> class eg(object):
... ... ...     def __init__(self, name):
... ... ...             self.name = name
... ... ...     def hi(self):
... ... ...             print "Hi %s" % (self.name)
... ... ...
... ... >>> greeter = eg("Bob")
... ... >>> greeter.hi()
... ... """
... >>> clean = chomp_prompt(dirty)
... >>> exec clean'''
>>> s2 = chomp_prompt(s)
>>> exec s2
Hi Bob

我的第二个建议是查看 ipython 为您打开编辑器并在完成编辑后执行您在其中输入的内容的能力:

http://ipython.scipy.org/doc/rel-0.9.1/html/interactive/tutorial.html#source-code-handling-tips

如果您将 emacs 设置为您的编辑器,我知道它能够删除一个矩形文本(您可能会猜到命令:Mx delete-rectangle),这对于摆脱那些讨厌的提示非常有用。我相信许多其他编辑也有这个。

于 2009-03-15T02:56:35.257 回答
1

“为什么”问题很少有有用的答案。

例如,如果我说是为了避免复杂的知识产权侵权诉讼,那是什么意思?没有。你仍然必须停止复制和粘贴,开始思考和打字。

或者,例如,如果我说这里给出了原因,则没有什么可操作的。问题是必须输入示例而不是剪切和粘贴。而这个问题并没有被这些信息解决。

确实,问题真的是“我想复制粘贴,没有那么多思考和打字,我该怎么做?” 答案是一样的。

您不能复制和粘贴交互式会话(doctest 评论除外)。你必须输入它。对不起。

于 2009-03-15T12:10:47.937 回答
0

代码以这种方式呈现,因为它是一个逐步的过程。您看到的三个字符“>>>”是 Python IDE 中的字符,但您似乎已经知道这一点。当您可以访问控制台或 shell 并键入 python 时,您将得到类似的东西。

% python
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

所以真的把它当作一种教育工具。:)

于 2009-03-15T02:30:43.247 回答