Biopython Tutorial and Cookbookの和訳を行ってる最中。
>>> from Bio import SeqIO >>> for seq_record in SeqIO.parse("ls_orchid.gbk", "genbank"): ... print(repr(seq_record.seq)) Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC', IUPACAmbiguousDNA()) ・ ・ ・ Seq('CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC', IUPACAmbiguousDNA())
FASTAファイルを読んで配列を出力する際にrepr
を使っている。
ただの.seq
だと
>>> for seq_record in SeqIO.parse("ls_orchid.gbk", "genbank"): ... print(seq_record.seq) CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC ・ ・ ・ CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC
配列だけが返される。
つまり、repr
のおかげでSeq
オブジェクトが保たれている。
そもそもrepr
をよく知らなかったので、調べてみた。
ちょっと調べた感じだとstr()
とそんな変わらない??
オブジェクトの印字可能な表現を含む文字列を返します。これは型変換で得られる (逆クオートの) 値と同じです。通常の関数としてこの操作にアクセスできるとたまに便利です。この関数は多くの型について、 eval() に渡されたときに同じ値を持つようなオブジェクトを表す文字列を生成しようとします。そうでない場合は、角括弧に囲まれたオブジェクトの型の名前と追加の情報 (大抵の場合はオブジェクトの名前とアドレスを含みます) を返します。クラスは、 repr() メソッドを定義することで、この関数によりそのクラスのインスタンスが返すものを制御することができます。
引用:2. 組み込み関数 — Python 2.7.14 ドキュメント
x = 'foo' In [1]: x = 'foo' In [2]: repr(x) Out[2]: "'foo'" In [3]: str(x) Out[3]: 'foo' 引用: [https://stackoverflow.com/questions/7784148/understanding-repr-function-in-python:title]
違った。eval()
と一緒にご紹介。
eval(x)
与えられた引数がPython 式 (技術的にいうと、条件のリスト) として解析され評価される。実行したいコマンドを文字列にして引数に与える。
下の場合だと、foo
をインタプリタで実行した返り値を返す。foo
なんて変数は定義されてないからエラーになる。>>> eval('foo') Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> eval('foo') File "<string>", line 1, in <module> NameError: name 'foo' is not defined
'foo'
をインタプリタで実行した値がほしい場合は>>> eval("'foo'") 'foo'
とすればよい。
repr(x)
xのマジックメソッド__repr__
を呼び出す。 基本的にeval()
の逆version。インタプリタで実行したときに印字可能な表現を返すような値を返すような値を文字列にしたもの。文字列にしたものである。
python >>> x = 'foo' >>> repr(x) "'foo'" そしたらこんな感じでダブルクオートで囲まれることになる。str(x)
xのマジックメソッド__str__
を呼び出す。>>> x = 'foo' >>> str(x) 'foo'
Biopythonの例ではseq_record.seq.__repr__
でSeq
オブジェクトを返すようになっているってだけぽい。
参考