30

我是 Python 新手。

简而言之:

在编写脚本期间,我不断地想通过将一些代码行从我的文本编辑器复制/粘贴到命令行 Python 解释器来测试我的程序的一小部分。当这些行缩进时(例如因为它们是函数的一部分),我希望解释器忽略或不检查缩进,这样我就不必在复制/粘贴之前取消缩进。那可能吗?

详细信息:

这是我的意思的简化示例:

假设我的文本编辑器包含以下正在开发的模块:

def MyFunc(arg):
    .../...
    if arg == 1:
        print "This is my function called with value 1."
        print "Done."
    else:
        print "This is my function called with value other than 1."
        print "Nothing else to say."
    .../...

假设我只想立即测试前 2print行(上述代码的第 4 行和第 5 行),以便快速检查我的模块的至少该部分是否按预期运行。如果我同时选择两条线,我至少会沿着缩进选择第二条线(如果不是两条线)。在命令行粘贴时,我会收到该缩进的错误。

解释器的一个简单强制行为是它简单地忽略缩进。

更强大的行为是要求解释器不检查缩进。即如果存在缩进,那么解释器应该尝试使用它,以便我仍然可以复制/过去甚至是结构化的代码段(例如上述代码的第 3 到第 8 行)。但如果有缩进错误,它会忽略它们。

如果没有办法做我在这里要求的事情,那么有没有做类似事情的技巧:一种简单的方法来快速检查你的代码片段,而无需每次你只想调整小部分时运行整个程序它在这里和那里。

NB 1:取消缩进不是我正在寻找的解决方案。

NB 2:拥有解释器和复制/粘贴功能提供了一种非常强大的轻松测试代码的方式,但是如果无法找到周转,Python 的显式缩进机制对于使用此处描述的解释器是一个很大的缺点。会很遗憾。

4

4 回答 4

49

在这种情况下,我使用以下技巧(前置if 1:):

>>> if 1:
...     print 1
...
1
于 2013-07-12T13:32:46.623 回答
34

ipython%cpaste函数将允许您粘贴缩进的代码并正常工作:

In [5]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:        print "This is my function called with value 1."
:        print "Done."
:^D<EOF>
This is my function called with value 1.
Done.
于 2013-07-12T13:33:33.777 回答
8

你能避免复制标签吗?

Notepad++ 和 Visual Studio 允许Shift + Alt在选择文本时通过按住来进行矩形选择。

无论您使用什么编辑器,都可能允许这样做。

是的,这并没有按要求回答您的问题,但也许它会解决您的问题。

编辑:

gvim 允许包含所有行内容的矩形选择Ctrl-l v Ctrl-q $ Shift-Down or Up arrow。感谢乔尔澄清这一点。

此链接解释并提供 vim 中的其他替代方案:http: //vim.wikia.com/wiki/Add_trailing_blanks_to_lines_for_easy_visual_blocks

于 2013-07-12T17:40:54.740 回答
2

好吧,您可以创建虚拟代码块,以便在复制粘贴代码后以正确的方式缩进。如果您要复制的代码如下所示:

...
    ...
        <python code to be copied>

然后在shell中,写:

>>> if True:
>>>     if True:
>>> <Paste your code here>
于 2013-07-12T13:46:40.940 回答