よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

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


※その他のエラーは未対応。

追記
テキストの前後にタグを付けるようなことは、なにもデコレータを使わなくても普通に文字列操作すればできる。

したらば、デコレータの使い途とすれば、先頭にデコレータの関数を書いて、装飾したい関数に「@なんちゃら」と書けば新しく機能が追加できる、急場しのぎのテクニックなんでしょうか。