JuliaPy / JuliaPy/PythonCall.jl
RFC for ergonomically passing Python variables to Julia
- Dominant language
- Julia
- Stars
- 1.1k
- Forks
- 86
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 3
Description
I propose one of the following two APIs as a way to more ergonomically pass Python variables to Julia code:
```python
jl.teval("const MY_CONST = $(x)", x=my_python_const)
```
a "template" eval, or
```python
with jl.let(x=my_python_const):
jl.seval("const MY_CONST = x")
```
which is a juliacall "let."
Would be interested in hearing other ideas too.
This is designed to address the following issue. Currently, passing Python objects to Julia via `seval` requires creating closure functions:
```python
jl.seval("x -> @eval const MY_CONST = $x")(my_python_const)
```
While Python's PEP 750 proposes [Template Strings](https://peps.python.org/pep-0750/) which could offer one solution:
```python
jl.seval(t"const MY_CONST = {my_python_const}")
```
We could implement something similar with a new `teval` method:
```python
jl.teval("const MY_CONST = {my_python_const}")
```
However, this has two key issues:
1. The `{}` syntax conflicts with Julia type signatures (e.g., `Vector{Float64}`), which could cause subtle bugs. Even if t-strings are eventually merged to Python, we would still face this issue!
2. `teval` wouldn't have access to local variables to reference `my_python_const`
Let's look at the two proposed approaches in more detail:
The first approach makes variable passing explicit but ergonomic:
```python
jl.teval("const MY_CONST = $(x)", x=my_python_const)
```
The second approach uses a context manager for temporary variable binding:
```python
with jl.let(x=my_python_const):
jl.seval("const MY_CONST = x") # Would access the bound value
```
Basically the `seval` would have access to this stack of Python objects passed via `let`, and put them into the Julia context via a Julia-evaluated `let` statement.
Thoughts? @cjdoris @mkitti
Going to post this on the Julia discourse too. Edit: https://discourse.julialang.org/t/rfc-for-ergonomically-passing-python-variables-to-julia/124266
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.