ラベル Python3 の投稿を表示しています。 すべての投稿を表示
ラベル Python3 の投稿を表示しています。 すべての投稿を表示

2025/08/20

Pythonで型クラスは実装できるか

型クラスとは

型クラスとは、主にHaskellなどの関数型言語で導入されている機能で、特定の振る舞いを持つ型をまとめるための仕組みです。


2024/06/23

Pythonで型のグループみたいなものを作ってみる

型のグループ

Pythonでは、特殊メソッド(__eq__, __lt__, __gt__など)を実装することによって、比較演算子を使うことができるようになります。例えば、intはdir(int)とすると、intの属性が表示されますが、その中に上記の特殊メソッドも含まれており、比較演算子を使うことができるようになっています。

Pythonにはint、strなど型はあります。しかし、Pythonには「この特殊メソッドを実装しているものは〇〇というグループである」というようなものはありません。

なので、作ってみました。


2022/09/11

Pythonのdataclassが思いの外いい感じに思える今日この頃

Pythonのdataclassを活用する

Pythonでクラスを作成する際、最近はdataclassを用いる方法が主流になってきているようですので、Pythonを使う方は、どのような機能を持っているかを知っておくほうが良さそうです。

このdataclassが導入されたのは3.7からで、Python3.7以降を使っていらっしゃる方は、このdataclassを使うことができます。そしてPython3.10ではdataclassでslotsの有効・無効が設定できるようになりました。


2022/05/25

PythonでRustのOption型のようなものを作ってみる

RustのOption型とは

Rustでは列挙型のOptionというものがあります。これはRustでは結構よく使うもので、値がある場合はSome(値)、無い場合はNoneというような使い方をします。

ポインタを扱える言語では、nullポインタ参照が未定義の動作で、問題を起こす可能性があるということで、さまざまな対策が必要なのですが、これを回避すべく機能としてOption型が存在します。

PythonはNoneがありますし、ポインタを扱う言語ではないですし、オブジェクトはすべて参照なので、Option型のようなものは必要ないように思います。が……


2022/01/20

Pythonを使っている人のためのOCaml入門

Pythonで型を意識するなら

近年、Pythonではプリミティブな型やtypingで型アノテーションを記述し、mypyで型チェックするという流れができているようです。例えばint型を2つ受け取り、int型を返すplus関数がある場合、以下のように型アノテーションを書きます。


>>> def plus(x: int, y: int) -> int:
...     return x + y
...

2021/11/10

Pythonコードのdocstringや型アノテーションについて

さぼりがちな自分のコード

近年Pythonでは型アノテーションを付けていこう的な流れになっているようです。個人的にはそこまでやるんだったら「がっつり型を指定する言語を使うほうがいいじゃない」という気持ちを持ちつつ、一応勉強しておりました。

ですので、一度しっかりとしたdocstringおよび型アノテーションを書いてみようと、現在私がGitHubのmy-python-warehouseというリポジトリに置いているコードから書き直して行くことにしました。


2021/04/20

Pythonでサウンドプログラミング

標準ライブラリなしでチャレンジ

Pythonではwaveが標準ライブラリに含まれていますが、今回はPythonでゼロから作ってみることにしました。その方がWAVEフォーマットがどのようなものなのかが分かるからです。

学習用に選んだ書籍は「サウンドプログラミング入門 〜音響合成の基本とC言語による実装〜」(著:青木直史 出版社:技術評論社)です。こちらの書籍はC言語で書かれております。サポートサイト(書籍内に書かれています)も設置されており、各章のプログラムもダウンロードできます。また先日、著者の方にメールしたところ、すぐに返信がありました。2013年発売にも関わらず、サポートもしっかりされていて勉強には最適な印象です。


2021/01/26

リストを2つのグループに分ける関数を作る

partition

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)

こりゃ便利!と思い、他の言語でも使いたい!ということで自前で書くことにしました。


2020/11/12

Pythonでロト6のデータをやんわり解析してみる

Pandasはやっぱり便利

私、久々にPythonを使う気がします。Pandasはナンバーズ4のデータを解析して以来となります。久々に使ってみても、やはり便利なライブラリだな、と感じます。

今回、ロト6の全データを入手することができたので解析をやろうというわけなのですが、以前はBeautifulSoup4を使って、みずほ銀行のロト6のページをスクレイピングして、Pandasを使うということをやり、なかなか骨の折れる作業(最近のデータと過去データのHTMLタグが統一的でない)だったのに、結果が伴わなかったことでロト6から遠ざかっていました。偶然1等1回当たれば満足なのに……


2019/11/27

Pythonのfunctools.lru_cache

竹内関数のメモ化が驚くほど簡単

竹内関数は、かの有名なLisper竹内郁雄さんが考案した関数で、与える数によって関数の再帰呼び出しの回数が増え、計算量が大きくなる関数で、よくベンチマーク測定などに使われます。
たらい回し関数と竹内関数の違いは、返す値が違い、それによって計算量に大きな違いがあることだそうです。それは、かのジョン・マッカーシーさんが、竹内関数では本来yを返すところを記憶違いでzにしてしまったということでそうなってしまったようです。
それはさておき、Pythonで普通に書くと以下のようになります。

2019/11/01

Python3で静的サイトジェネレータを自作してみる

leopa

Python3で静的サイトジェネレータを作ってみました。その名は「leopa」
leopaはヒョウモントカゲモドキの英名leopard geckoから命名し、ヒョウモントカゲモドキの愛称「レオパ」として使われています。
leopaのリポジトリはこちら

2019/10/16

色、いろいろ(Python, Rust, OCaml, C, Clojure)

ライブラリがなくても色付けできる

まずは実例画像を
この魅惑のレインボーう◯ちプログラムでは、サードパーティ製ライブラリは使っていませんし、標準ライブラリも特に使っておりません。色に関するコードは以下のようになっています。

2019/05/11

性懲りもなくPythonでLispのcondを考える

リニューアルしました

実はまだ考えていた「Pythonでcond」
今回のcondは以下のようなものになりました。

2019/02/19

続・Pythonでcondを作ってみました

execやevalを使わないタイプ

前回の記事でご紹介しましたcondは、改名しecondとしました。そして今回新たに作成しましたものをcondということにしました。

2019/02/16

Pythonで即席でcondを作ってみました

if文を最小限に抑える

前回書いたPythonに欲しい機能、Common Lispのcondですが、即席で考えて作ってみました。コードは以下のようになりました。

2019/02/12

Common Lispのcond

Pythonにはないcond

Rustをしばらく使い、たまにPythonを触る時、パターンマッチングのための何かが欲しくなることがあります。Pythonでもif文で似たようなことはできますが、何となくすっきり感がありません。

2019/01/31

PythonのMkDocsとNetlifyで静的サイトを作成する

MkDocs

MkDocsはPythonのサードパーティ製ライブラリで、静的サイトジェネレータと呼ばれているものです。他に有名なものはSphinxですが、私はやや癖の強さを感じるSphinxよりMkDocsの手軽さのほうが好きなので、こちらをよく使います。
MkDocsのインストールは、pip install mkdocsで簡単にインストールできますが、デフォルトで使えるテーマが2種類しかなく、しかもややダサい(個人的感想)気がします。したがって、インストールの際、よりスタイリッシュにカスタマイズできるmkdocs-materialも一緒にインストールすることをおすすめします。

2018/11/22

RustでPythonの関数のようなマクロを作ってみました

set!とdict!

Rustでは、びっくりマークが後ろに付いているものはマクロです。学習を始めて最初に使うマクロはprintln!だと思います。println!は、改行付きの出力となっており、もう一つprint!という改行なしの出力というものもあります。その他にもいくつかマクロが標準で使えるようになっていますが、自分自身でもマクロを作成することが可能です。