non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

PythonにはC風のキャストやポインタは無いのではと疑問に感じ、pygletを触った件

こんばんは。新型コロナウィルスのせいで子供たちは何も言わないと、一日中フォートナイトとYouTubeをPCやSwitchで見ている@kjunichiです。

背景

過疎ってる俺のノート(note.com)のフッタに表示されたおすすめノートをみたら、 OpenCVWebカメラの表示をOpenCVGUIではなく、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はあるのだろうか?という感想をもった。

あと、こういった記事を英語で書けるようになりたいと思いました。

関連記事

14年前の記事