JuliaPy / JuliaPy/PythonCall.jl
RFC for ergonomically passing Python variables to Julia
- 主要言語
- Julia
- スター
- 1.1k
- フォーク
- 86
- 平均マージ
- 1日 22時間
- マージ済み PR(30日)
- 3
説明
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
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。