Python2とPython3で変更になった部分なのでメモしていく。 まず、Iterableインターフェイスを持つことは変わっていないので、ユーザから見ると使い方は同じということは指摘しておく。(余談: OS上にあるファイル・ストレージを扱うためには、この外部イテレータ方式の方が汎用性があるし、分かりやすくもあるので望ましいと思う。破壊的操作可能なコレクションの場合も、これももう単なる一種のストレージであるので、同じこの方式で良いと思う)
`sys.stdin`はPython2/3共に`Iterable`となる。
$ isinstance(sys.stdin, Iterable) True
`sys.stdin`のtype(class)はPython2では`file`だったが、Python3では`TextIO`扱いとなっている。これはUnix的な「ファイル(file)」では区分けが曖昧すぎるからということだろう。実際、Javaではストリーム関連のクラスはかなり細かく区分されていた。
Python2の場合: $ type(sys.stdin) <type 'file'> Python3の場合: $ type(sys.stdin) <class '_io.TextIOWrapper'>
0 コメント:
コメントを投稿