pythonのデコレータを使ってテキストをhtmlタグで飾ってみるテスト
いまいち使い方・使い道のわからないデコレータのお勉強中。
コンソールから文字を入力させ、その文字にhtmlのタグをつけるヘボいコードができました。
たとえば「あいうえお」と入力すると、タグの一覧が表示され、そこから何か一つ選んで番号を入力すれば
<title>あいうえお</title>
こんな感じのが出てくる。
ソースコードはこんなの。
def decorate(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) #文字列をタグで挟んで出力 print("<{0}>{1}</{0}>".format(res[1],res[0])) return wrapper @decorate def input_text(): print("書込み内容を入力してね") text = input(">> ") # タグの辞書 (keyは通し番号、valueがタグ) 長いので途中をコメントアウト tag_lists = {"1":"h1","2":"h2","3":"h3","4":"h4","5":"h5","6":"h6","7":"p","8":"div","9":"span","10":"a", #"11":"img","12":"article","13":"aside","14":"canvas","15":"footer","16":"nav","17":"section","18":"video","19":"a","20":"address", #"21":"b","22":"base","23":"br","24":"caption","25":"cite","26":"code","27":"col","28":"colgroup","29":"command","30":"datalist", "31":"dd","32":"del"} #通し番号(key)とタグ(value)の一覧をコンソールに出力 for tag_list in tag_lists.items(): print("{} : {}".format(tag_list[0],tag_list[1])) # タグの選択 print("好きなタグを番号で選んで下さい。") key = input(">> ") # 全角を半角に変換して再代入 key = key.translate(str.maketrans({chr(0xFF01 + i) : chr(0x21 + i) for i in range(94)})) item = tag_lists[key] return text,item input_text()
タグを選択させる箇所で、全角数字を入れるとエラーがでましたのでこちらの方法で処理。
pythonで全角を半角にするコード - よちよちpython
※その他のエラーは未対応。
追記
テキストの前後にタグを付けるようなことは、なにもデコレータを使わなくても普通に文字列操作すればできる。
したらば、デコレータの使い途とすれば、先頭にデコレータの関数を書いて、装飾したい関数に「@なんちゃら」と書けば新しく機能が追加できる、急場しのぎのテクニックなんでしょうか。