通过检查程序运行推断类型

farthing的Python项目详细描述


farthing将在跟踪参数时运行任意python代码并返回 给定文件或目录中所有函数的类型。那么放屁罐 根据看到的值的类型自动添加类型批注 在执行过程中。如果要添加静态类型,这可能很有用 到现有的Python代码,或探索代码库,在那里你不确定什么 类型A值具有。

例如,以下代码:

deffactorial(n):result=1foriinrange(2,n+1):result*=ireturnresult

可自动转换为:

deffactorial(n:int)->int:result=1foriinrange(2,n+1):result*=ireturnresult

对以下测试文件运行farthing:

fromnose.toolsimportassert_equalimportfactdeftest_fib():test_cases=[(0,1),(1,1),(2,2),(3,6),(4,24),(5,120),]forindex,valueintest_cases:yield_check_fact,index,valuedef_check_fact(index,value):assert_equal(value,fact.factorial(index))

用法

可以从命令行调用farthing。第一个参数应该是 应该添加类型批注的文件或目录。其他的 参数应该是要与任何参数一起运行的python脚本。例如:

farthing demo/fact.py _virtualenv/bin/nosetests demo/tests.py

演示

要运行演示,只需运行demo.sh。解释它的实际功能:

  1. 运行make bootstrap以设置具有依赖项的virtualenv。
  2. 运行. _virtualenv/bin/activate以输入virtualenv。
  3. 运行farthing demo/fact.py _virtualenv/bin/nosetests demo/tests.py到 运行_virtualenv/bin/nosetests demo/tests.py并将注释添加到 demo/fact.py基于执行运行中使用的实际值的类型。

限制

目前,Farthing只是一个快速的原型,所以目前 以下限制:

  • 只使用类型的名称添加注释,而类型的名称可能不是 在当前范围内可用。
  • 无法将类型批注添加到正在运行的python脚本中。
  • 所看到的第一种类型是使用的,而不是试图找到一个超级类型。

我很想看到类似的项目,如果你知道的话, 如果你让我知道,我会很感激的。

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

推荐PyPI第三方库


热门话题
java转换/分组列表中的值   java无法解析安卓中来自其他类的方法调用?   基于java Socket的通信独立于用于实现它的编程语言。怎么可能?   支持GZip的java编写游戏文件存储?   在IntelliJ中测试应用程序的java设置类路径   java反转单链表   java登录Firebase时出现了什么问题   java如何创建基于Spring4注释的通道?   java将2d矩阵向右旋转   socketTomcat WebSocket和单独的java进程通信   curl无法将数据发布到服务器,获取错误java。木卫一。IOException:服务器返回HTTP响应代码:415   java使用空对象模式消除空对象   java使用<String,Boolean>加载缓存的正确用法?   java为什么是CertificateFactory方法。generateCertifictae(InputStream)卡在无限循环上?