我的python脚本通常在文件的第一部分包含“可执行代码”(函数,类和& c),最后包含“测试代码”(交互式实验)。
我希望python
,py_compile
,pylint
& c完全忽略最后的实验内容。
我正在为#if 0
寻找类似cpp
的内容。
如何做到这一点?
以下是一些想法及其不良原因:
sys.exit(0)
:适用于python
,但不适用于py_compile
和pylint
def test():
下:我无法再将代码复制/粘贴到python
REPL中,因为它有非平凡的缩进"""
行之间:emacs不再缩进并正确地使代码充实 PS。我的IDE是Emacs,我的python解释器是pyspark
。
答案 0 :(得分:3)
使用ipython
而非python
用于REPL它具有更好的代码完成和内省,当您粘贴缩进代码时,它可以自动"去缩进"粘贴的代码。
因此,您可以将实验代码放入测试函数中,然后粘贴部分而不必担心并且必须对代码进行去缩进。
如果要粘贴可被视为单个块的大块,则需要使用%paste
或%cpaste
魔法。
例如
for i in range(3):
i *= 2
# with the following the blank line this is a complete block
print(i)
使用普通粘贴:
In [1]: for i in range(3):
...: i *= 2
...:
In [2]: print(i)
4
使用%paste
In [3]: %paste
for i in range(10):
i *= 2
print(i)
## -- End pasted text --
0
2
4
In [4]:
也可以在增强的Python解释器IPython中启动PySpark。 PySpark适用于IPython 1.0.0及更高版本。要使用IPython,请在运行bin / pyspark时将IPYTHON变量设置为1: 1
$ IPYTHON=1 ./bin/pyspark
答案 1 :(得分:2)
不幸的是,没有广泛(或任何)标准描述你在谈论什么,所以让一堆python特定的东西像这样工作将是困难的。
但是,你可以用这样的方式包装这些命令,使它们只读到一个能指。例如(假设您使用的是unix系统):
cat $file | sed '/exit(0)/q' |sed '/exit(0)/d'
该命令将一直读到'退出(0)'找到了。您可以将其输入您的检查器,或创建您的检查员阅读的临时文件。您可以在可能与编辑一起工作的路径上创建包装器可执行文件。
Windows可能能够使用类似的技术。
我可能会建议一种不同的方法。单独的文件可能是最好的。您可以探索iPython笔记本作为可能的解决方案,但我不确定您的用例是什么。
答案 2 :(得分:1)
使用python-mode.el将任意块标记为部分 - 例如通过py-sectionize-region
。
拨打py-execute-section
。
评论后更新:
python-mode.el由melpa提供。
M-x list-packages RET
寻找python-mode - 内置的python.el提供'python,而python-mode.el提供'python-mode。
答案 3 :(得分:1)
遵循选项2的内容。
我通常将实验代码放在主方法中。
def main ():
*experimental code goes here *
然后,如果你想执行实验代码,只需调用main。
main()
答案 4 :(得分:1)
我认为标准(' Pythonic')处理这个问题的方法是这样做:
LIKE
击> 在评论后修改
我不认为使用普通的Python解释器可以实现你想要的东西。您可以查看IEP Python编辑器(website,bitbucket):它支持类似Matlab的单元格模式,其中可以使用双注释字符定义单元格({{ 1}}):
class MyClass(object):
...
def my_function():
...
if __name__ == '__main__':
# testing code here
从##
开始行的所有代码,直到下一个这样的行或文件结尾构成单个单元格。
每当光标位于特定单元格内并且您触发一些热键(默认为Ctrl + Enter)时,该单元格中的代码将在当前运行的解释器中执行。 IEP的另一个特性是可以使用F9执行所选代码;一个非常标准的功能,但这里的好处是IEP会巧妙地处理空白,所以只需从方法中选择和粘贴内容就会自动生效。
答案 5 :(得分:1)
我建议您使用正确的版本控制系统来保持"真实的"和实验"零件分开。
例如,使用Git,您只能在提交中包含没有实验部分的实际代码(使用add -p
),然后暂时stash
运行各种工具的实验部分。< / p>
您还可以将实验部分保存在自己的分支中,然后在需要时将rebase
放在非实验部分的顶部。
答案 6 :(得分:0)
另一种可能性是将测试作为doctests放入代码的文档字符串中,这无疑只适用于更简单的情况。
这样,它们仅被doctest
模块视为可执行代码,但作为其他注释。