PythonにはC風のキャストやポインタは無いのではと疑問に感じ、pygletを触った件
背景
過疎ってる俺のノート(note.com)のフッタに表示されたおすすめノートをみたら、 OpenCVでWebカメラの表示をOpenCVのGUIではなく、pygletなるマルチプラットフォームGUIライブラリを使って表示するコードを 見かけた。
そこの見かけたコードに以下の記述があり、とても気になった。
```python image_texture = (GLubyte * number_of_bytes)(*img.astype('uint8')) ```
Pythonってキャストやポインタが付けたっか?
前述のコードをパッと見ると、Pythonってキャストやポインタが付けたっか?とおもう。
キャストはint(val1)の様にはできることが分かったが、C的なキャストはないっぽいが、ctypesがあった。 どうやら、ここでのキャストはctypes由来のキャスト指定風の記述らしいことが分かった。
変数の前の「*」
defで宣言する関数の引数だと、可変引数を表す模様。
今回ののように変数の前に「*」をつけると、タプルとして扱われるようなるっぽい。
GLbyteが関数?
データ型に正の整数を掛ける
これは、Pythonで型付き配列を作る際の宣言方法のようだった。
型*サイズ
として型付きの配列をサイズ分作るらしい。
おわりに
文法がシンプルと聞いたことがあるPythonだが、扱うライブラリで書き方がC風になるのだなぁと 学びがあった。mrubyをちょっと触ってる身としては、Rubyでも、上っ面の表記が 本来扱えない表現が可能になったようにみえるGemはあるのだろうか?という感想をもった。
あと、こういった記事を英語で書けるようになりたいと思いました。
関連記事
- BlenderでPython使って最速降下曲線を描いてみる
- mruby-juliaでPythonもmrubyから呼び出せるようになった
- シェルスクリプトのかわりにPythonでマルチプラットフォームで動かそうとして学んだこと
- Windowsで64ビットなPythonでPython-Fuが動くgimpをビルドした
- PYTHONビルド時の--enable-frameworkと--enable-sharedの違い
- WindowsでソースからビルドしたGimpでPYTHONPATHを指定せずにPython Fuを使うには
- NAPI版のnode-ffi-napiを使ってNode.jsからPythonを動かす
- node-ffi-napiでPythonを動かして、PyObjC経由でCocoa APIを叩いて結果を別スレッドでHTTPで受け取った
- pyenvがぶっ壊れて何故かpython3が/usr/bin/python3になってしまう??