大量的例代码表示输出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
>>> 

现在,显而易见的事情你想做的就是运行上述码..因此,我跑"蟒蛇"和粘贴的上述文本。

>>> >>> 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):
    ^

代码碎!?..

让它跑的,我需要..

  • 抄和粘贴行一个在一段时间,确保我副本所有的压痕正确。如果你搞砸(说,近的一个领先的空间,你必须重新开始)
  • 使用一个文本编辑器移除 >>>..., 然后再次贴

这不是一个巨大的问题,但鉴于有多少例码是提出在这种格式,这似乎很奇怪你有做到这一点..

有帮助吗?

解决方案

如何运行/采用"输出的蟒蛇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
    
  • 使用一个能够在文本编辑器(例如, C-x r k 杀死矩形区域 Emacs)

  • 使用 文档测试 模块

复制没有外壳的提示在首位(虽然我不知道如何做到这一点上,例如)。

为什么履行范式被使用

保存下来 documentation.txt:

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

>>> 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
>>>

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

运行:

$ 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

其他提示

我不知道,如果有一个很好的解决方案了这一点。理想情况下,还会有一些方式对修改行为的interpretter接受复制、粘贴的输入。这里有一些备选建议:

使用三引用节省的例子。然后,使用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作为你的编辑的,我知道它有能力为删除一个矩形的文本(你可能会猜的命令:M-x删除矩形),这会的工作完全摆脱那些讨厌的提示。我确信许多其他编辑用的有这个。

"为什么"的问题,很少有有用的答案。

例如,如果我说的原因是要避免一个复杂的知识产权侵权诉讼,这是什么做的?什么都没有。你还是要停止复制、粘贴,并开始思考和打字。

或者,例如,如果我说为什么被赋予的 在这里,, 没什么可操作的。问题是这一例子有被输入,而不是剪切和粘贴。这个问题不解决由这些信息。

事实上,真正的问题是"我要复制和粘贴没有这么多的思考和打字,我怎么能那么做?"答案是一样的。

你不可以复制和粘贴的交互式会议(除非在履行范的意见).你要类型。对不起。

代码是提出这种方式,因为它意味着是一个逐步的过程。三个字,你看看">>>"是Python IDE,但似乎你已经知道了。当你有机会获得了一台或一个外壳,并型蟒蛇,你会得到这样的事情。

% 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.
>>>

所以,真正把它作为一种教育工具。:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top