不熟悉 Perl 的 __DATA__ 变量 Google 告诉我它经常用于测试。假设您也在考虑测试您的代码,您可能需要考虑 doctest (http://docs.python.org/library/doctest.html)。例如,而不是
import StringIO
__DATA__ = StringIO.StringIO("""lines
of data
from a file
""")
假设您希望 DATA 成为您现在所拥有的文件对象,并且您可以像以后的大多数其他文件对象一样使用它。例如:
if __name__=="__main__":
# test myfunc with test data:
lines = __DATA__.readlines()
myfunc(lines)
但如果 DATA 的唯一用途是用于测试,您最好创建一个 doctest 或在 PyUnit / Nose 中编写一个测试用例。
例如:
import StringIO
def myfunc(lines):
r"""Do something to each line
Here's an example:
>>> data = StringIO.StringIO("line 1\nline 2\n")
>>> myfunc(data)
['1', '2']
"""
return [line[-2] for line in lines]
if __name__ == "__main__":
import doctest
doctest.testmod()
像这样运行这些测试:
$ python ~/doctest_example.py -v
Trying:
data = StringIO.StringIO("line 1\nline 2\n")
Expecting nothing
ok
Trying:
myfunc(data)
Expecting:
['1', '2']
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.myfunc
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
Doctest 做了很多不同的事情,包括在纯文本文件中查找 python 测试并运行它们。就个人而言,我不是一个狂热的粉丝,并且更喜欢更结构化的测试方法 (import unittest),但它无疑是一种测试代码的 Python 方法。