小编Kan*_*dan的帖子

用于Python中的静态类型检查的工具

我正在使用大量现有的Python代码库,并希望开始添加类型注释,以便我可以进行一定程度的静态检查.我想象的是Erlang,StrongtalkTyped Scheme/Racket.

我见过快速和脏的装饰器,它们根据函数参数和返回类型注释插入动态检查,但我正在寻找更强大的东西并在编译时执行检查.

现在有哪些工具可用于此类事情?我熟悉编译器和类型检查,如果它具有良好的基础,我绝对愿意改进一个不完整的工具.

(注意:我对讨论静态类型的优缺点不感兴趣.)

编辑:一个例子:

def put(d, k, v):
   d[k] = v
Run Code Online (Sandbox Code Playgroud)

我希望能够将put函数注释为具有类型put<K,V>(dict<K,V>, K, V) -> None.

更新:新的PEP 484(2014年9月)定义了Python 3.5+中静态类型和类型注释的标准.有一个名为mypy的类型检查工具,它与PEP 484兼容.

python static-typing

39
推荐指数
3
解决办法
1万
查看次数

如何使用相同的可变借用两次调用 serde_json::to_writer?

我正在尝试编写一个调用serde_json::to_writer两次的函数来写两件事,但我不知道怎么做。

这是一次尝试(游乐场链接):

extern crate serde_json;

fn main() {
    let mut out = std::fs::File::create("out.txt").unwrap();
    write_stuff(&mut out);
}

fn write_stuff<W: ?Sized>(out: &mut W) -> Result<(), std::io::Error>
where
    W: std::io::Write,
{
    serde_json::to_writer(out, &1).unwrap();  // `out`: value moved here
    serde_json::to_writer(out, &2).unwrap();  // `out`: value used here after move
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

编辑:想出了一种方法来编译东西,但有没有更简单的方法(游乐场链接):

extern crate serde_json;

fn main() {
    let mut out = std::fs::File::create("out.txt").unwrap();
    write_stuff(&mut out);
}

fn write_stuff<W: ?Sized>(out: &mut W)
where
    W: std::io::Write,
{
    write_wrapper(out);
    write_wrapper(out);
} …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
251
查看次数

标签 统计

python ×1

rust ×1

static-typing ×1