yiskw note

機械学習やプログラミングについて気まぐれで書きます

【Python】特定の行だけBlackによるコード整形を行わないようにする

概要

PythonのPEP8準拠のコードフォーマッターとして、Blackが有名です。 Blackは、他のフォーマッターよりもカスタマイズ性が低く、制限が多いです。 その代わり、コードの書き方が統一されるので、細かい書き方で議論したり、悩んだりする必要がなくなり、 開発やコードレビューを高速に行うことができます。

ただ、稀にコードの特定の部分だけ、blackによるコード整形を行いたくない場合があります。 今回は、コードの特定の行だけコード整形を行わない方法について調べたので、こちらにメモを残します。

続きを読む

【Python】定数管理のための、値の追加・変更を不可にするクラスを実装する

概要

機械学習の実験を回していると、しばしば複数の定数を管理したくなることがあります。(例えば、実験を回すマシンごとのデータセットのパスなど) Pythonでは、他のプログラミング言語constのような定数がサポートされていません。 PEP8の慣例に従って、大文字とアンダースコアで命名して定数を表す変数を作成したとしても、 それらは基本的に外部から書き換え可能で、意図しない変数の変更が起きてしまいます。

そこで今回は、Pythonで定数を管理するためのクラスを作成してみました。 その定数はクラス変数として管理され、クラス変数の追加や変更はできないようになっております。 そのため、定数の意図しない書き換えは発生せず、バグを防ぐことが可能です。 もし他に良い方法があれば、コメントにて教えていただけると幸いです。

続きを読む

【numpy】特定の範囲だけにseedを設定する

概要

最近、numpyの配列をとある方法でシャッフルする関数を実装していたのですが、
与えたseedの値によってシャッフルの仕方が固定されるようにしたいと考えていました。

np.random.seedをシャッフルの処理の前に挟んでやれば、必ず同じシャッフルの仕方にはなるのですが、関数の外のseedも変更してしまうことになります。
そこで今回は、関数の外のseedを変更せずに、特定の範囲だけにseedを設定する方法について調べたので、こちらにメモを残しておきます。

続きを読む