python での「避けがち「てた」」シリーズ:map(str.???, …)

これ書いたついでに思い出したことを。

これね:

1 Python 3.9.8 (tags/v3.9.8:bb3fdcf, Nov  5 2021, 20:48:33) [MSC v.1929 64 bit (AMD64)] on win32
2 Type "help", "copyright", "credits" or "license" for more information.
3 >>> list(map(str.strip, [" a ", " b "]))
4 ['a', 'b']

一つ前の忘れがちなものと違って、これはワタシは自覚的に避けてたやつで、今でもそうなんだけれど、そろそろ避けるのをやめるべきだな、て話ね。

なんで避けてたのかすぐに分かる人は OSS 参加経験者とか、Python ユーザ歴が長い人だわね。最近になって始めた人や、「Python 3 から使い始めた人」はこれはきっとわからない。そう、「str」よ、これ、Python 2.x までは「バイト列」の意味であって、Python 3.x で言うところの「str」は「unicode」なわけ。なので Python 2.7 対応なんかを考え出すと実に些細な苦痛を感じることが出来る。なのでほとんど手癖でこうしちゃうのよね:

Python 2.7 でも Python 3.x でも使えるやり方、として
1 >>> list(map(lambda s: s.strip(), [" a ", " b "]))
2 ['a', 'b']

でもさ、もう「Python 2.7 is DEAD」なのよ、いい加減 map(str.xxx, てもいいかなぁ、と、そんな話でしたとさ。