首页 > 解决方案 > 如何使用 PyO3 在嵌入在 Rust 代码中的 Python 代码中执行地板除法?

问题描述

我正在尝试在 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 代码中使用地板除法运算符(或等效运算符)?

标签: rustpyo3

解决方案


文档中

// 和 //= 运算符不可用,因为它们开始注释。

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

所以试试

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

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

推荐阅读