Pythonのstr.translateは単一文字列を引数に取れるらしい

6032 ワード

TL;DR

Pythonのstr.translateは文字列を引数に取れる

ブラックボックス的に触った感じのおそらくの挙動

a.translate(b)(a, bはstr)としたとき

    res = ""
    for c in s:
        try:
            res += b[ord(c)] 
        except:
            res += c
    return res

予想した論理的な挙動を書いているだけでこういうコードではまったくないと思います。
(例外をこんな風に使うのはバットプラクティスであることは自覚していますが、簡潔に書きたかったので上記のように書いています)

顛末

サイバーセキュリティプログラミング[1]を読んでいるときに、
以下のようなアスキー文字列を印字可能な文字列に変換するという処理に出会いました。

HEX_FILTER = ''.join([(len(repr(chr[i])) == 3) and chr(i) or '.' for i in range(256)])

printable = word.translate(HEX_FILTER)

pythonにはtranslateっていう便利な関数があるんやなあ(Python素人並感)という感想を抱きWebでググると
translateの引数に文字列を一つ指定するという使い方を明記しているものに出会えませんでした。