如何使用PyO3在Rust代码中嵌入的Python代码中执行地板分割?

时间:2019-12-17 15:24:08

标签: rust pyo3

我正在尝试在Rust中内联Python代码,但是当Python代码中包含地板分割//的运算符时,该操作会失败,就好像它是Rust注释一样被忽略。

例如:

#![feature(proc_macro_hygiene)]
use inline_python::python;

fn main() {
    python! {
        print("Hi from PyO3")
        foo = 37.46 // 3
        print(foo)
    }
}

这将打印37.46,即使它应该打印12.0(37.46底限除以3的结果)。

一个可行的解决方案是用foo = math.floor(37.43 / 3)代替该划分,但我希望不必修改Python代码。我还担心它会影响性能。

有没有办法在PyO3的Rust代码中嵌入的Python代码中使用地板除法运算符(或等效方法)?

1 个答案:

答案 0 :(得分:2)

来自the documentation

  

//和// =运算符在开始注释时不可用。

     

解决方法:您可以改写##,它会自动转换为//。

所以尝试

#![feature(proc_macro_hygiene)]
use inline_python::python;

fn main() {
    python! {
        print("Hi from PyO3")
        foo = 37.46 ## 3
        print(foo)
    }
}