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

34 投票
7 回答
5038 浏览
提问于 2025-04-15 20:34

我是不是可以理解为,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 !

撰写回答