在Python中,模仿Perl __END__的最佳方法是什么?

时间:2010-03-18 17:18:46

标签: python perl

我认为Python没有Perl的__END__的直接等价物,我是否正确?

print "Perl...\n";

__END__
End of code. I can put anything I want here.

我想到的一个想法是使用三引号字符串。有没有更好的方法在Python中实现这一目标?

print "Python..."

"""
End of code. I can put anything I want here.
"""

6 个答案:

答案 0 :(得分:17)

perl中的

__END__
块可以追溯到程序员必须处理来自外部世界的数据并且喜欢在程序本身中保留它的示例的时间。

很难想象我知道。

例如,如果您有一个移动目标,例如硬件日志文件,其中包含由于固件更新而发生变异的消息,您希望比较该行的新版本和新版本,或者不严格保留注释与程序操作相关(“代码在每个月的第x天看起来很慢”)或者如上所述,用于运行程序的参考数据集。电信公司是一个经常需要这个行业的例子。

最后,如果你对一个问题的唯一回答就是“你为什么在做X的时候想要那样做”,那么对于限制性而言,Python似乎对其拥护者的心态产生了真实而无聊的影响。 ?”当X不那么有用时请保持安静++。

答案 1 :(得分:7)

你建议的三重引用形式仍会创建一个python字符串,而Perl的解析器只会忽略__END__之后的任何内容。你不能写:

"""
I can put anything in here...
Anything!
"""
import os
os.system("rm -rf /")

在我看来,评论更合适。

#__END__
#Whatever I write here will be ignored
#Woohoo !

答案 2 :(得分:5)

你要求的东西不存在。 证明:http://www.mail-archive.com/python-list@python.org/msg156396.html

一个简单的解决方案是转义任何“as”并执行正常的多行字符串 - 请参阅官方文档:http://docs.python.org/tutorial/introduction.html#strings

(另外,atexit不起作用:http://www.mail-archive.com/python-list@python.org/msg156364.html

答案 3 :(得分:2)

嗯,sys.exit(0)怎么办? (假设你当然在import sys之上)

至于为什么它会有用,有时候我会坐下来对某些事情进行重大改写,并希望标记我的“好到这一点”。

以临时方式使用sys.exit(0),我知道在这一点以下什么都不会执行,因此如果出现问题(例如,服务器错误),我知道必须高于那一点。

我喜欢它比评论文件的其余部分稍微好一点,因为有更多的机会犯错误并取消注释某些内容(在行首开始按键),并且因为插入1行似乎更好(稍后将被删除),而不是修改X-许多行,然后必须在以后对其进行修改。

但是,这是分裂的头发;评论也很有效......假设你的编辑支持轻松评论一个地区,当然;如果没有,sys.exit(0)一路走来!

答案 4 :(得分:0)

Python没有与此直接等价的东西。

你为什么要这样?当有更多一致的方法(如将文本作为注释放在最后)时,这听起来并不是一件非常棒的事情(这就是我们如何在Python源文件中包含任意文本。三引号字符串用于制作多行字符串,不适用于与代码无关的文本。)

您的编辑应该能够轻松地使用多行注释。

答案 5 :(得分:0)

出于各种原因,我一直都使用__END__。我这样做已经有很长的时间了,以至于我习惯了使用它(通常在exit('0'); / BEGIN {}例程中加上它(通常在END{}之后)。很遗憾,Python没有等效语言,但是我只是在底部注释掉了以下几行:无关紧要的,但这就是通过一种统治所有语言的方式所获得的。