使用 kwargs 从 Python Rust 函数调用失败
Calling from Python Rust function with kwargs fails
我正在努力让 kwargs
工作。我明白就像 #[args(args="*")]
代表 args
,#[args(kwargs="**")]
代表 kwargs
.
然而,当我使用 pyo3-pack
打包以下内容并尝试使用任何参数调用 test1
时,我收到错误 MyClass.test1()() takes at most 0 argument (1 given)
.
我做错了什么?
#![feature(custom_attribute)]
#![feature(specialization)]
use pyo3::prelude::*;
use pyo3::types::{PyDict, PyTuple};
#[pyclass]
struct MyClass {}
#[pymethods]
impl MyClass {
#[staticmethod]
#[args(kwargs = "**")]
fn test1(kwargs: Option<&PyDict>) -> PyResult<()> {
if let Some(kwargs) = kwargs {
for kwarg in kwargs {
println!("{:?}", kwarg);
}
} else {
println!("kwargs is none");
}
Ok(())
}
#[staticmethod]
#[args(args = "*")]
fn test2(args: &PyTuple) -> PyResult<()> {
for arg in args {
println!("{:?}", arg);
}
Ok(())
}
}
#[pymodule]
fn test123(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_class::<MyClass>()?;
Ok(())
}
我很确定这是 PyO3 中的一个错误:this check seems to be adding nkeywords
for no reason. File a GitHub issue 看看维护者怎么说。
我正在努力让 kwargs
工作。我明白就像 #[args(args="*")]
代表 args
,#[args(kwargs="**")]
代表 kwargs
.
然而,当我使用 pyo3-pack
打包以下内容并尝试使用任何参数调用 test1
时,我收到错误 MyClass.test1()() takes at most 0 argument (1 given)
.
我做错了什么?
#![feature(custom_attribute)]
#![feature(specialization)]
use pyo3::prelude::*;
use pyo3::types::{PyDict, PyTuple};
#[pyclass]
struct MyClass {}
#[pymethods]
impl MyClass {
#[staticmethod]
#[args(kwargs = "**")]
fn test1(kwargs: Option<&PyDict>) -> PyResult<()> {
if let Some(kwargs) = kwargs {
for kwarg in kwargs {
println!("{:?}", kwarg);
}
} else {
println!("kwargs is none");
}
Ok(())
}
#[staticmethod]
#[args(args = "*")]
fn test2(args: &PyTuple) -> PyResult<()> {
for arg in args {
println!("{:?}", arg);
}
Ok(())
}
}
#[pymodule]
fn test123(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_class::<MyClass>()?;
Ok(())
}
我很确定这是 PyO3 中的一个错误:this check seems to be adding nkeywords
for no reason. File a GitHub issue 看看维护者怎么说。