我是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."
.../...
让我们说我只是想直接测试2个print
行(上面代码的第4行和第5行),以便快速检查我的模块的至少部分是否按预期运行。如果我同时选择两条线,我将至少选择第二条线的缩进(如果不是两条线)。粘贴在命令行时,我会收到该缩进的错误。
解释器的一个简单强制行为是它只是忽略缩进。
更强大的行为是要求口译员不检查缩进。即如果有缩进,那么解释器应该尝试使用它,这样我仍然可以复制/过去甚至一段结构化的代码(例如上面代码的第3到8行)。但是如果有缩进错误,它就会忽略它们。
如果没有办法做我在这里要求的事情,那么有没有办法做类似的事情:一种快速检查代码片段的简单方法,而不必每次只想调整时都运行整个程序这里和那里的一小部分。
注意1:unindenting是不解决我正在寻找的问题。
注意2:拥有一个解释器和一个复制/粘贴功能提供了一种非常强大的方法来轻松测试代码,但Python的显式缩进机制是这里所述的解释器使用的一个很大的缺点,如果转换不能被发现。会很遗憾。
答案 0 :(得分:45)
在这种情况下,我使用以下技巧(前置if 1:
):
>>> if 1:
... print 1
...
1
答案 1 :(得分: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.
答案 2 :(得分:7)
你能避免复制标签吗?
Notepad ++和Visual Studio允许在选择文本时按住Shift + Alt
进行矩形选择。
你使用的编辑器也可能允许这样做。
是的,这并没有按照要求回答您的问题,但可能会解决您的问题。
修改强>
gvim允许通过Ctrl-l v
Ctrl-q
$
Shift-Down or Up arrow
包含所有内容的矩形选择。
感谢Joel澄清这一点。
此链接解释并提供vim中的其他替代方案: http://vim.wikia.com/wiki/Add_trailing_blanks_to_lines_for_easy_visual_blocks
答案 3 :(得分:2)
那么你可以创建虚拟代码块,这样在复制粘贴后你的代码会以正确的方式缩进。 如果您要复制的代码如下所示:
...
...
<python code to be copied>
然后在shell中写下:
>>> if True:
>>> if True:
>>> <Paste your code here>