import os, unittest
# figure all the modules available
dir = os.path.split(__file__)[0]
这会打印当前目录,因为文件点指向当前文件名
mods = {}
不知道这是做什么的,但我猜这会创建一个列表?还是数组?
l = []
我想这也会创建一个数组并指定它
__all__ = []
不知道__all__
是否具有某些特殊意义,但它看起来像一个数组
for file in os.listdir(dir):
if not file.endswith('.py') or file == '__init__.py':
continue
name = file[5:-3]
5:-3,这是什么意思?
mods[name] = __import__(file[:-3], globals(), locals(), [])
mods意味着什么?
__all__.append(name)
l.append(mods[name].suite())
def suite():
return unittest.TestSuite(l)
答案 0 :(得分:2)
从广义上讲,他将文件列在以.py结尾的目录中,然后将这些名称添加到包的内容列表中(__all__
)。他继续按名称导入这些脚本(使用__import__
),然后将模块列表(表示脚本的对象)组成一组单元测试(unittest.TestSuite)。
通过阅读(或至少略读)完整的官方教程,您将为自己节省一个受伤的世界:
http://docs.python.org/tutorial/index.html
回答您的直接问题:
__all__
是一种列出包内容的方法,如果你不喜欢python默认的方式。这里的文档:http://docs.python.org/tutorial/modules.html#importing-from-a-package
索引[5:-3]
表示从列表5开始,直到(但不包括)-3的列表中的项目。负指数从结尾开始计数,即-1是最后一项。这里的文档:http://docs.python.org/tutorial/introduction.html#lists
mods
是在脚本中创建的。这是一个字典(perl用户读“哈希”),没有特别的意义。 http://docs.python.org/tutorial/datastructures.html#dictionaries
答案 1 :(得分:2)
几乎所有问题都围绕着基本的Python语法。
{}设置一个类似于关联数组的字典 []是一个列表,就像一个可变的标准数组
for file in os.listdir(dir): if not file.endswith('.py') or file == 'init.py': continue name = file[5:-3]
循环浏览文件,我很确定它忽略了非python文件或init.py,然后获取文件名的子字符串
[5:-3]本质上是获取文件名的子字符串,但是当使用os包循环遍历目录时,我不能100%确定是否不同。
mods是在mods = {}
附加内容正在向使用[]
声明的列表中添加内容你应该读“潜入Python”。或者至少访问python的网站并阅读有关基本数据结构的部分。
答案 2 :(得分:1)
该程序正在使用suite()
扩展名在同一目录中的文件中定义的.py
函数中创建测试套件。
[5:-3]
忽略了文件名的前五个字符(我假设是 test _)和.py
扩展名。
__ all__是一个包含模块导出标识符的列表。它被设置为先前恢复的模块列表。
这个错综复杂的代码可能是实现目标的错误方法。