- よりPythonicなPythonを目指して(前編):Python 3が後方互換性を捨ててでも求めたもの (1/2) - @IT
- よりPythonicなPythonを目指して(後編):言語としての一貫性を重視したPython 3の進化 (1/2) - @IT
などを読んだ。
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']