型クラスとは
型クラスとは、主にHaskellなどの関数型言語で導入されている機能で、特定の振る舞いを持つ型をまとめるための仕組みです。
型クラスとは、主にHaskellなどの関数型言語で導入されている機能で、特定の振る舞いを持つ型をまとめるための仕組みです。
Pythonでは、特殊メソッド(__eq__, __lt__, __gt__など)を実装することによって、比較演算子を使うことができるようになります。例えば、intはdir(int)とすると、intの属性が表示されますが、その中に上記の特殊メソッドも含まれており、比較演算子を使うことができるようになっています。
Pythonにはint、strなど型はあります。しかし、Pythonには「この特殊メソッドを実装しているものは〇〇というグループである」というようなものはありません。
なので、作ってみました。
Pythonでクラスを作成する際、最近はdataclassを用いる方法が主流になってきているようですので、Pythonを使う方は、どのような機能を持っているかを知っておくほうが良さそうです。
このdataclassが導入されたのは3.7からで、Python3.7以降を使っていらっしゃる方は、このdataclassを使うことができます。そしてPython3.10ではdataclassでslotsの有効・無効が設定できるようになりました。
Rustでは列挙型のOptionというものがあります。これはRustでは結構よく使うもので、値がある場合はSome(値)、無い場合はNoneというような使い方をします。
ポインタを扱える言語では、nullポインタ参照が未定義の動作で、問題を起こす可能性があるということで、さまざまな対策が必要なのですが、これを回避すべく機能としてOption型が存在します。
PythonはNoneがありますし、ポインタを扱う言語ではないですし、オブジェクトはすべて参照なので、Option型のようなものは必要ないように思います。が……
近年、Pythonではプリミティブな型やtypingで型アノテーションを記述し、mypyで型チェックするという流れができているようです。例えばint型を2つ受け取り、int型を返すplus関数がある場合、以下のように型アノテーションを書きます。
>>> def plus(x: int, y: int) -> int:
... return x + y
...
近年Pythonでは型アノテーションを付けていこう的な流れになっているようです。個人的にはそこまでやるんだったら「がっつり型を指定する言語を使うほうがいいじゃない」という気持ちを持ちつつ、一応勉強しておりました。
ですので、一度しっかりとしたdocstringおよび型アノテーションを書いてみようと、現在私がGitHubのmy-python-warehouseというリポジトリに置いているコードから書き直して行くことにしました。
Pythonではwaveが標準ライブラリに含まれていますが、今回はPythonでゼロから作ってみることにしました。その方がWAVEフォーマットがどのようなものなのかが分かるからです。
学習用に選んだ書籍は「サウンドプログラミング入門 〜音響合成の基本とC言語による実装〜」(著:青木直史 出版社:技術評論社)です。こちらの書籍はC言語で書かれております。サポートサイト(書籍内に書かれています)も設置されており、各章のプログラムもダウンロードできます。また先日、著者の方にメールしたところ、すぐに返信がありました。2013年発売にも関わらず、サポートもしっかりされていて勉強には最適な印象です。
OCamlのListモジュールにはpartitionという便利な関数がありまして、これを使うとクイックソートが簡単に書くことができます。
let rec qsort = function
| [] -> []
| h :: t ->
let (l, r) = List.partition (fun x -> x < h) t in
(qsort l)@[h]@(qsort r)
こりゃ便利!と思い、他の言語でも使いたい!ということで自前で書くことにしました。
私、久々にPythonを使う気がします。Pandasはナンバーズ4のデータを解析して以来となります。久々に使ってみても、やはり便利なライブラリだな、と感じます。
今回、ロト6の全データを入手することができたので解析をやろうというわけなのですが、以前はBeautifulSoup4を使って、みずほ銀行のロト6のページをスクレイピングして、Pandasを使うということをやり、なかなか骨の折れる作業(最近のデータと過去データのHTMLタグが統一的でない)だったのに、結果が伴わなかったことでロト6から遠ざかっていました。偶然1等1回当たれば満足なのに……
condは、改名しecondとしました。そして今回新たに作成しましたものをcondということにしました。condを作ってみました
condですが、即席で考えて作ってみました。コードは以下のようになりました。cond文pip install mkdocsで簡単にインストールできますが、デフォルトで使えるテーマが2種類しかなく、しかもややダサい(個人的感想)気がします。したがって、インストールの際、よりスタイリッシュにカスタマイズできるmkdocs-materialも一緒にインストールすることをおすすめします。println!だと思います。println!は、改行付きの出力となっており、もう一つprint!という改行なしの出力というものもあります。その他にもいくつかマクロが標準で使えるようになっていますが、自分自身でもマクロを作成することが可能です。