在Python中模拟Perl的__END__的最佳方法是什么?
我是不是可以理解为,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.
"""
7 个回答
6
你问的这个东西是不存在的。
证明:http://www.mail-archive.com/python-list@python.org/msg156396.html
一个简单的解决办法是把任何的 " 变成 \",然后用普通的多行字符串——可以看看官方文档:http://docs.python.org/tutorial/introduction.html#strings
(另外,atexit 这个东西也不好使:http://www.mail-archive.com/python-list@python.org/msg156364.html)
22
在perl中,
__END__
这个代码块是源于一个时代,那时程序员需要处理来自外部世界的数据,并且喜欢在程序中保留这些数据的示例。
我知道这很难想象。
举个例子,如果你有一个不断变化的目标,比如一个硬件日志文件,里面的信息因为固件更新而不断变化,这时你可能想比较旧版本和新版本的内容,或者记录一些和程序操作不完全相关的笔记(比如“每个月的第x天,代码似乎运行得很慢”),或者像上面提到的那样,保留一组参考数据来运行程序。电信行业就是一个经常需要这样做的例子。
最后,Python的某些拥护者似乎有一种近乎宗教般的限制性思维,如果你对一个问题的唯一回应是“你为什么想那样做,而不是做X呢?”而X又不是那么有用的话,请保持沉默++。
8
你提到的三重引号形式仍然会创建一个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 !