缩小python 2源代码
minip的Python项目详细描述
Python2迷你版 作者:gareth rees,http://garethrees.org/>;
简介
minipy是python 2的小型化程序。它在 保留代码含义的方法,同时将其减少到 大小。例如:
$ cat fib.py cache = {0: 0, 1: 1, 2: 1, 3: 2} def fibonacci(n): """Return the nth Fibonacci number.""" if n not in cache: a = n // 2 r = n % 2 m = (r * 2) - 1 cache[n] = fibonacci(a + 1) ** 2 + m * fibonacci(a + r - 1) ** 2 return cache[n] $ minipy --rename --docstrings fib.py b={0:0,1:1,2:1,3:2} def c(a): if a not in b:d=a//2;e=a%2;f=e*2-1;b[a]=c(d+1)**2+f*c(d+e-1)**2 return b[a]
命令行
Usage: minipy [options] [-o OUTPUT] FILE Options: --version show program's version number and exit -h, --help show this help message and exit -o OUTPUT, --output=OUTPUT output file (default: stdout) -D, --docstrings remove docstrings and other statements with no side effects (implies --noselftest) -R, --rename aggressively rename non-preserved variables -i INDENT, --indent=INDENT number of spaces per indentation level -p PRESERVE, --preserve=PRESERVE preserve words from renaming (separate by commas) --nojoinlines put each statement on its own line --noselftest skip the self-test --debug dump the parse tree
自检
在不意外更改 意思很难理解:查看list of issues以了解许多尴尬的情况 那得修理了。因此,在默认操作模式下,minipy 执行“自测试”:它获取缩小的代码,重新解析它,然后 断言已精简代码的解析树与 分析原始代码的树。如果自我测试通过,那么你可以 确信minipy没有改变你的意思 代码。
为了通过自我测试,minipy必须避免对 导致对解析树进行无害更改的代码。这些变化 是:
- 将pass替换为0。
- 用-1替换-(1)。
您可以使用--noselftest选项来启用这些更改,但是 禁用自测在minipy中会有很小的错误风险 更改代码的含义。
可选转换--rename和--docstrings不能是 再加上自我测试,这些选项意味着--noselftest。
请report所有自检失败,附加导致 失败。
重命名
python使用内省和duck类型意味着 可以在程序中更改名称,而无需更改 意义。minipy的--rename选项因此进行了“最佳尝试” 发现需要保留但不能保证 什么都行。使用风险自负!
重命名时保留以下名称:
- 通过--preserve选项在命令行上指定的名称 (写入--preserve=name1,name2,name3以保留多个名称)。
- 内置名称(abs,all,any,apply,…)。
- 用作属性的任何名称(.join,.index,.copy,.sort,…)。
- 任何以两个下划线开头和结尾的名称。
- 所有导入模块的名称。
- 模块在from module import *语句中导出的任何名称。
- 列表中分配给__all__全局变量的任何名称。
许可证
minipy是免费软件:您可以在 自由党公布的GNU通用公共许可条款 软件基础,许可证的版本3,或者 选项)任何更高版本。
这个程序的发布是希望它会有用,但是 没有任何保证;甚至没有 适销性或适合某一特定目的的适销性。有关详细信息,请参见GNU General Public License。