non vorrei lavorare

2020年度からの小学校プログラミング教育の必修化を親として迎えるブロガーの書く、子供との日常

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年前の記事