今さらPython3 (38) - 第5章復習課題
第5章の復習課題に突入。さっき、気がついたんだけど、巻末に復習課題の解答が載っていたのね。知らずに答え合わせせずにきちゃった。。。
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
※自分の場合、作業場所によってWindowsマシンを使っている場合とMacを使っている場合があるので、Path名などを表示するときに、両者の表記が混じっている事がある。この復習課題はMac OSX Yosemite環境にPython 3.4.3をインストールした環境で行っている。
5.1
まずzoo.pyを作る。
def hours(): print('Open 9-5 daily')
これを/Users/ken/PycharmProjects/IntroducingPython3の配下に置く。インポートするためにPathを通さないと行けないので確認する。
>>> for element in sys.path: ... print(element) ... /Users/ken/PycharmProjects/IntroducingPython3 /Library/Frameworks/Python.framework/Versions/3.4/lib/python34.zip /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4 /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages >>>
あらかじめ~/.bash_profileに以下のエントリを足しておいたので、すでに入っているね。
# Temporary setting for Introducing Python3 PYTHONPATH="/Users/ken/PycharmProjects/IntroducingPython3:${PYTHONPATH}" export PYTHONPATH
ファイルを汚したくないなら、これで追加しておけばよし。
>>> sys.path.append('/Users/ken/PycharmProjects/IntroducingPython3')
さて本題。zoo.pyをインポートしてhours()を実行すればよし。
>>> import zoo >>> zoo.hours() Open 9-5 daily >>> >>> from zoo import hours as hr >>> hr() Open 9-5 daily >>>
一応両方のパターンを試しておいた。
5.2
なんかもう同じ事やっちゃった気がするけど。
>>> from zoo import hours as menagerie >>> menagerie() Open 9-5 daily >>>
わざわざ長い名前を付け直すのもいかがなものかとw
※後から追記
5.3の設問見て、ここではmenagerieと名付ける対象を間違えたことに気づく。
>>> import zoo as mengerie >>> mengerie.hours() Open 9-5 daily >>>
こうやれってことか。menagerieの意味が分からなくて寝付けない人はこれをw
5.3
あれ?これもやっちゃったような。てか、設問を読み違えててたのね。
>>> from zoo import hours >>> hours() Open 9-5 daily >>>
こうやれば良いんでしょ?
5.4
>>> from zoo import hours as info >>> info() Open 9-5 daily
この章で一番大切だったのはimport文の使い方だったんですね(棒)
5.5
辞書作れば良いのね。
>>> plain = {'a':1, 'b':2, 'c':3} >>> plain {'b': 2, 'c': 3, 'a': 1} >>>
分かってらっしゃる。後ろの設問を気にしてわざと変な順序で出てきてくれたんだね。
5.6
前振りでバレバレだったけど、OrderedDict()の登場ですね。
>>> plain = {'a':1, 'b':2, 'c':3} >>> plain {'b': 2, 'c': 3, 'a': 1} >>> >>> from collections import OrderedDict as od >>> fancy = od(plain) >>> fancy OrderedDict([('b', 2), ('c', 3), ('a', 1)]) >>>
OrderedDictのスペルをいつも間違えるので、odと名付けて実行しましたよ。
5.7
>>> from collections import defaultdict as dd >>> dict_of_lists = dd(list) >>> dict_of_lists['a'].append('something for a') >>> dict_of_lists['a'] ['something for a']
回答としてはここまで。以下おまけ。
>>> dict_of_lists defaultdict(<class 'list'>, {'a': ['something for a']}) >>> dict_of_lists['b'] [] >>> dict_of_lists defaultdict(<class 'list'>, {'b': [], 'a': ['something for a']}) >>>
defaultdict(list)で定義しているので、存在しないキーのbを渡すと値としては、空のリスト[]が渡されると理解。
(つづく)