rust
1use pyo3::FromPyObject;
2let v: Vec<usize> = dummy.as_ref().extract().unwrap();
これでできませんか?
また、英語に抵抗がないようでしたら、質問には https://gitter.im/PyO3/Lobby を使うのがいいと思います。
(他の方の回答について)
PyAnyは、一旦try_into()によりPyObjectに変換した後extract()によりRustの型にキャストするようです。
そういう使い方は想定していません。
今回の例だと&PyLIst
からAsRef::as_ref
で&PyAny
へアップキャスト(この操作は0コストです)して、 &PyAny
からFromPyObject::extract
でVecに変換しています。
基本的にはFromPyObject
でたいてい事足りると考えていいです。
ただこのへんの設計は今後大きく変わる可能性があり、0.7以降ではどうなるかわかりません(このアップキャストは無駄なので、改善が必要かなと思っています)。
PyObjectはGILGuardとの接し方(?)がPyAny等と異なる型です。
たしかドキュメントにPyObject::extract
を使え的な記述があったかと思いますが、これはrust-cpython時代から更新されていない記述です(直そうとは、思ってたんですけど)。
&Py~
を持っているときにPyObjectを経由してなにかしようとすると、少しオーバーヘッドになるので、あまり良くないです。
(補足)
rust
1use pyo3::ObjectProtocol;
2let v: Vec<usize> = dummy.extract().unwrap();
これもできます
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/07 09:15