大量示例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):
^
代码坏了!?..
要让它运行,我必须要么......
>>>
和...
,然后重新粘贴这不是一个大问题,但考虑到以这种格式呈现了多少示例代码,看起来很奇怪你必须这样做。
答案 0 :(得分:9)
使用IPython shell
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中的矩形区域
使用doctest模块
首先没有shell提示复制(例如,我不知道如何在Google Chrome上执行此操作)。
将以下内容保存到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
强>
答案 1 :(得分: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设置为你的编辑器,我知道它能够删除一个文本矩形(你可以猜测命令:M-x delete-rectangle),它可以完美地摆脱那些讨厌的提示。我相信很多其他编辑也有这个。
答案 2 :(得分:1)
“为什么”问题很少有有用的答案。
例如,如果我说的原因是为了避免复杂的知识产权侵权诉讼,那会是什么呢?没有。你仍然需要停止复制和粘贴,然后开始思考和输入。
或者,例如,如果我说的原因是here,那么就没有可行的了。问题是必须输入示例而不是剪切和粘贴。这个信息并没有解决这个问题。
事实上,问题实际上是“我想在没有太多思考和打字的情况下进行复制和粘贴,我该怎么做?”答案是一样的。
您无法复制和粘贴交互式会话(doctest评论除外)。你必须输入它。遗憾。
答案 3 :(得分:0)
代码以这种方式呈现,因为它是一步一步的过程。您看到的三个字符“&gt;&gt;&gt;”是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.
>>>
所以真的把它作为一种教育工具。 :)