Python 3.x での変更点(の一部)

などを読んだ。

range() はリストを返さない

イテレータを返すようになった。

>>> a = range(5)
>>> a
range(0, 5)
>>> type(a)
<class 'range'>
>>> print(a)
range(0, 5)

a は range というオブジェクトで print しても数字は表示されない。

>>> for b in a:
...     print(b)
... 
0
1
2
3
4

こうすればいいのかな。

print は関数になった

文ではなく関数になったらしい。

>>> str = 'instant'
>>> print str
  File "<stdin>", line 1
    print str
            ^
SyntaxError: invalid syntax
>>> print(str)
instant

print(hoge) の形を取る

辞書の keys もリストではない

view というオブジェクトらしい。

>>> d = dict(a=1, b=2, c=3)
>>> ks = d.keys()
>>> type(d)
<class 'dict'>
>>> type(ks)
<class 'dict_keys'>
>>> ks
dict_keys(['a', 'c', 'b'])
>>> list(ks)
['a', 'c', 'b']

辞書に要素を追加する

>>> d.update(e=5)
>>> d
{'a': 1, 'c': 3, 'b': 2, 'e': 5}

先ほどの ks をリストにすると、

>>> list(ks)
['a', 'c', 'b', 'e']

要素の追加が反映されている!

>>> d.update(f=89, g=34)
>>> d
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'g': 34, 'f': 89}
>>> ks
dict_keys(['a', 'c', 'b', 'e', 'g', 'f'])
>>> list(ks)
['a', 'c', 'b', 'e', 'g', 'f']