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

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第三方库


热门话题
JavaFileUtils。资源目录上的listFiles()   如何在java安全中禁用日志记录?   列出如何在Java中对对象数组排序   堆栈帧采用的java大小   java在两个布局之间设置交叉淡入动画   java如何在SeleniumWebDriver中选择oiselect的值   java无法获取类型为org的对象的未知属性“实现”。格拉德尔。应用程序编程接口。内部的人工制品dsl。依赖关系。DefaultDependencyHandler   未找到java Android onClick内部片段   java CXF:无法创建加密类null   web服务java 1.6枚举问题com。国际商用机器公司ws。网络服务。发动机枚举。风格包裹   java将整行作为字符串数组从具有多列的树元素中获取   java在不调整窗口大小的情况下不显示所有元素   java如何在activemq中创建/预配置持久订户。xml,以便在ActiveMQ启动时准备好这些订阅?   java垃圾收集能保证程序不会耗尽内存吗?   如何从C++或PHP发送数据到java?   java Guava迭代器,并在列表对象中对列表进行迭代   java Android SQite数据库搜索和查找列错误   基于MySQL和Java的排序函数优化   具有持久性的java消息会卡在嵌入Tomcat的ActiveMQ中