すなぶろ

フリーランスのWebエンジニアがPythonを中心にプログラミング情報を紹介していきます。Rubyも書きますが、今はPython勉強中。一緒にPythonista目指しましょう!

Pythonのテストで悩むあなたへ送るnoseフレームワーク

f:id:sandmark:20171017200859j:plain
nose = unittest + coverage + doctest + and more!

前回はデコレータを使ってコードのインデントを浅くし、ボイラープレートとなっていた繰り返し処理をひとつにまとめました。しかしその際、「挙動が変わってしまったらどうしよう」と怯えながら書き換えていたのも事実です。

sandmark.hateblo.jp

今回はユニットテストという命綱を作ることで実装に専念できる環境を整え、また中途半端なリファクタリングもどきによってバラバラになった感のある仕様をまとめてみます。

教科書はいつものスマパイです。

続きを読む

Pythonのデコレータをイチから展開・解説してみた 【あれ? ただのクロージャじゃん】編

f:id:sandmark:20171016071130j:plain

前回のコードは思い返すだけでも寒気がするほどひどいものでした。そこで今回はPython固有の機能であるデコレータを使って、ちょっとPythonっぽいコードに変更します。

sandmark.hateblo.jp

このデコレータ、LispHaskellのように関数や処理を頻繁に渡す言語に慣れ親しんだ人なら比較的すぐに理解できると思うのですが、そうでない場合は難しく感じるかもしれません。しかし理解してしまえば「なんだそんなことか」といったものなので、もちろん乱用は禁物ですが、適宜使っていくことで明らかに読みやすく宣言的なコードを書くことができます。参考: PEP 318

続きを読む

Radonで始めるコードリファクタリング 【ランクAよりもPython力をつけろ】編

スマートPythonプログラミング、引き続き読んでます。

sandmark.hateblo.jp

読み進めていると、Radonという循環的複雑度を調査するパッケージが紹介されていたので、今回はそれを用いてsandmark/unmodictionary.pyリファクタリングに挑戦します。

先に言っておきますが、結果は失敗です。今の私の力ではリファクタリングできなかったという事実がわかったことが何よりの成果です。それに伴って課題が見つかったので、個人的には有意義な時間でした。

続きを読む

Python初心者が中級者になるためのスタートダッシュ 【ググるのは時間の無駄】編

皆さん今日もググってますか? 私のようにRubyから転向したPython初心者にとっては、Googleは神のようなサービスです。「Rubyではこう書けたけど、Pythonではどう書けばいいの?」という質問に、Google先生は(基本的には)誠実に応えてくれます。

しかし、この学習方法には大きな問題があります。RubyのコードをいくらPythonに移植しても、Pythonらしい書き方が身に付くわけではないからです。キーワード引数デコレータジェネレータイテレータ……似たようなものはRubyにもありますが、決して同じ使い方をするものではないはずなのです。

ひとつひとつ調べていたのでは、いつまで経っても初心者を卒業できません。できたとしても膨大な時間が必要でしょう。あくまでも包括的な説明を読んで、芯からPythonic Wayを身に着けたいのです。

ではどうすればいいのか。簡単です。教科書を使いましょう。ただの教科書ではいけません。Pythonの教科書です。Javaで説明するには一工夫も二工夫も必要なくらいPythonらしい書き方を説明してくれる、Pythonにどっぷり浸かったPythonの教科書です。

スマートPythonプログラミング、略してスマパイです。そこらの入門書は読破したけど、「Pythonらしい」という感覚がわからないあなたにお勧め。私はこの本でPythonistaの仲間入りをします。

続きを読む

Python初心者に送る「人工知能の作り方」 Part7(終)

前回はマルコフ連鎖で学習・応答するモジュールを作りました。それなりに複雑な処理が含まれていましたが、設計時点で仕様を決めておき、それをコメントを含めたコードにすることで、メンテナンス性を保っています。

sandmark.hateblo.jp

今回はmarkov.pyDictionaryクラスに組み込み、新たにMarkovResponderを追加します。といっても、学習も応答もmarkov.py内で完結しているのでほとんど変更を加える必要はありません。

その代わりといっては何ですが、辞書ファイルが存在しなかった場合の例外処理を組み込んでみます。今回のソースコードはこちら

f:id:sandmark:20171013214817p:plain
結論:ハムスターはAI。作者もAI

続きを読む

Python初心者に送る「人工知能の作り方」 Part6 後編

前回は「マルコフ連鎖とはなんぞや」に始まり、それをプログラムの設計に落とし込むところまで行きました。今回はいよいよ実装に移ります。

sandmark.hateblo.jp

Python的には『オブジェクトのコピー』『オブジェクトの永続化』を扱っていきます。今回のソースコードはこちら

f:id:sandmark:20171013001115p:plain
坊っちゃん、「ぞなもし」と言う

続きを読む

Python初心者に送る「人工知能の作り方」 Part6 前編

このシリーズも佳境となり、ついにAIが初めての自分の言葉を発しました。人間の赤ちゃんだって親の真似をするのですから、前回は猿真似をする猿から一気に人間の赤ちゃんまで進化したと言えます。

sandmark.hateblo.jp

今回はさらに踏み込んで、「ゼロから言葉を作る」という試みをやってみましょう。しかし課題が課題なので、今回は実装方法の説明に留め、次回から本格的にコーディングしていきます。

f:id:sandmark:20171012013103p:plain
ゼロから始めるマルコフ連鎖

続きを読む