缩小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以保留多个名称)。
  • 内置名称(absallanyapply,…)。
  • 用作属性的任何名称(.join.index.copy.sort,…)。
  • 任何以两个下划线开头和结尾的名称。
  • 所有导入模块的名称。
  • 模块在from module import *语句中导出的任何名称。
  • 列表中分配给__all__全局变量的任何名称。

许可证

minipy是免费软件:您可以在 自由党公布的GNU通用公共许可条款 软件基础,许可证的版本3,或者 选项)任何更高版本。

这个程序的发布是希望它会有用,但是 没有任何保证;甚至没有 适销性或适合某一特定目的的适销性。有关详细信息,请参见GNU General Public License

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java对称二维随机数数组   java Spring 3基于使用另一个数据源查询的连接字符串设置web应用程序数据源   java如何将类型保存为变量并在cast中使用   使用Struts的Jsp页面中出现java重复前缀错误   如何在SpringJava中自定义排序?   java如何高效地从自定义对象实现JList?   java如何在我的Android应用程序中调用外部库项目   java如何合并JTable的两列   java如何从字符串中提取括号数据   java Click recyclerView新建活动错误尝试调用虚拟方法   如何用Java表示字符串列表和列表?   swing java。awt。机器人按键事件为继续按下   java安全地忽略包含所有其他对象的JSON属性   java合并自定义双链表