オブジェクトの中身を確認したい場合に試すこと(Python)
はじめに
Pythonを勉強しているとたくさんのモジュールを使うので、オブジェクトに何が入っているのか、どういう構造なのか知りたくなります。
例えばPytorchを使った機械学習をしていると自分で作ったオブジェクトですら何が入っているのかわかりません。
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)
trainloader
<torch.utils.data.dataloader.DataLoader at 0x7f1738c0cb10>
このようにデータのアドレスが返ってくるだけのこともチラホラあります...
その時に毎回あれやこれや試しているので忘れないように記事にします。
普通に出力
これだけで中身が分かればいいのですが、世の中そんなに甘くありません...
obj
type関数
type関数を使うことでそのオブジェクトの型がわかります。
Pythonは動的型付け言語だからこそ、そのオブジェクトが何の型であるか把握しておくことは重要です。
まず最初に型を確認してからググるor下の関数を試してください。
type(obj)
次元の確認
type関数で出力された結果がもしnumpy.ndarray型なら.shapeメソッドを使ってオブジェクトの次元数を確認できます。
obj.shape
また、もし機械学習でよく使われるPytorchのtorch.Tensor型なら.size()メソッドを使ってオブジェクトの次元数を確認できます。
obj.size()
keys()メソッド
もしdict型なら.keys()メソッドを使うことで、辞書のキーを全て出力することができます。
dir関数やvars関数と違いキーのみなので見やすい出力結果になります。
obj.keys()
dir関数
引数に渡したオブジェクトの全ての属性(メソッドやインスタンス変数)を返します。
dir(obj)
vars関数
属性と一緒にその中に入ってる変数も出力してくれます。
vars(obj)
おまけ
pprint関数
dir関数やvars関数は見づらい場合が多々あるのでpprint関数で整えます。
横に長い出力を整形して見やすく出力してくれます。
今までの組み込み関数と違い、pprintモジュールをインポートして使います。
import pprint
pprint.pprint(dir(obj))
pprint.pprint(vars(obj))
search関数
探したい属性の有無を確認したい場合、上のpprint関数で見やすくなったものの出力が多ければ探すのは大変です。
お目当てのものがあるかないかを出力するコードをsearch関数で作りました。
reモジュールをインポートするのを忘れないでください。
import re
for line in obj:
if re.search(r'探したい名前', line):
print("exist")
まだまだ学習中ですので他に方法があれば追加していきます。
Discussion