Python.use(better) #Tutor: step09 -- def eval_tips(self, view, target, item)
‖記事一覧‖ Python.use(better)《Python3.1》《復刻版》
def eval_tips(self, view, target, item)
基礎編で利用した学習ツールを作成する過程を通して「プログラミング」の理解を深めます。
※ Tcl/Tk で作成した例題を、Python3.1 で再構成しました。
事例:モジュールを起動する
■ 全項目を確認する
全ステップの「項目」を確認するには、関数 do を利用します。
$ python -i tutorTk.py >>> do() ... 9: step09 -- def eval_tips(self, view, target, item):
■ 各項目を実行する
各ステップの「動作」を確認するには、関数 do に実引数を指定します。
>>> do(9) >>> # -------------------------------------------------- step09
リスト領域の右側には、スクロールバーが現れます。
- リスト領域(左下部)では、任意の項目を選択できます。
- このとき、最大長の項目を表示するのに必要な長さ(幅)が確保されます。
(1)任意の項目を選択(ダブルクリック)すると、
- テキスト領域(上部)には、選択した項目に関連する情報が表示されます。
- テキスト領域(右下部)には、選択した項目のテストケースを実行した結果が表示されます。
(2)項目 "__add__" を選択すると、テキスト領域(右下部)には、
- テストケースが用意されていないので、"*** None ***" が表示されます。
(3)項目 "append" を選択すると、テキスト領域(右下部)には、
- テストケースが用意されているので、実行した結果が表示されます。
事例:コードの解説
def step09():
"""def eval_tips(self, view, target, item):"""
class Tutor(object):
...
def do_test(self, view, target, item):
view.delete(1.0, END)
try:
self.eval_tips(view, target, item) #@:
except NameError:
s = "*** None ***"
view.insert(END, "%s"%s)
def eval_tips(self, view, target, item):
temp_file = "zoo.txt"
save = sys.stdout # with context
sys.stdout = open(temp_file,"w+")
spec = target.__name__
eval("ex_%s(spec,None)"%item)
sys.stdout = save # with context
self.log(view, open(temp_file,"r"))
def log(self, view, file):
for e in file:
view.insert(END, "%s"%e)
■ #1: try/except
def do_test(self, view, target, item): view.delete(1.0, END) try: self.eval_tips(view, target, item) #@: except NameError: s = "*** None ***" view.insert(END, "%s"%s)
選択した項目 item に相当するテストケースを実行 eval_tips して、
- その結果をテキスト領域に表示します。
そのテストケースが見つからないと、
- 例外 NameError を捕捉して、except ブロックを実行します。
■ #2: 標準出力 stdout
save = sys.stdout # with context sys.stdout = open(temp_file,"w+") ... sys.stdout = save # with context
標準出力 stdout を切り替えるだけで、その出力結果をファイルに保存できます。
■ #3: 組み込み関数 open
sys.stdout = open(temp_file,"w+") ... self.log(view, open(temp_file,"r"))
テストケースを実行した結果を、標準出力 stdout ではなく、ファイル temp_file に書き出します。
ファイル temp_file を読み込んで、その内容をテキスト領域 view に表示します。
■ #4: テストケース
テストケースを実行した結果は、テキスト領域で確認できます。
def do_test(self, view, target, item): ... self.eval_tips(view, target, item) #@: def eval_tips(self, view, target, item): ... self.log(view, open(temp_file,"r")) def log(self, view, file): ...
補助関数 do_test は、eval_tips を介して、log に帰結します。
def do_test(self, view, target, item): view.delete(1.0, END) ... view.insert(END, "%s"%s) def log(self, view, file): ... view.insert(END, "%s"%e)
メソッド delete および insert を用いて、テキスト領域 view に実行した結果を出力します。このとき、do_test と log とで、同様の構造が出現していることに注目してください。
》こちらに移動中です《
↑TOP