Functions
Empty modules are not that useful: let’s add some functions to our extension!
As you’ve seen in the “Setup” section, pyo3 provides another procedural macro
to define functions that can be called from Python: #[pyfunction].
Back then we used it to define the it_works function:
#![allow(unused)]
fn main() {
use pyo3::prelude::*;
// 👇 A Python function defined in Rust
#[pyfunction]
fn it_works() -> bool {
true
}
}
Unlike modules, functions aren’t exposed to Python automatically; you must
attach them to a module using the wrap_pyfunction! macro:
#![allow(unused)]
fn main() {
#[pymodule]
fn setup(m: &Bound<'_, PyModule>) -> PyResult<()> {
// 👇 Expose the function to Python
m.add_function(wrap_pyfunction!(it_works, m)?)?;
Ok(())
}
}
Exercise
The exercise for this section is located in 01_intro/03_functions