ひさふぃの日記

DjangoとPythonとLaravelが好き。大阪でフリーランスエンジニアやってます。

入門Python3のメモ 2章|数値、文字列、変数

Pythonの入門書として各所でオススメされている入門Python3。

shikouno.hatenablog.com

前半7章までで基本をおさらいし、後半8章からは他分野で活用できそうなちょっとした応用編がオールインワン。みんなのPython 第4版の次に読むとちょうどいいレベル感。

購入後にかいつまんでパラパラ読みはしていたのですが、まとまった時間が取れそうだったので一気通読しようかと思い立ちました。

その際、初めて知る箇所や曖昧でいつも検索する箇所を後で見返せるようにメモしておこうかと。

そのため、このメモは僕の知識的偏りから生み出されたものであることを最初にお断りしておきます。気になった方は書籍を購入してください。

入門 Python 3

ちなみに、1章は導入なのでメモがありませんが、1.2 Pythonと多言語の比較は面白いので必見!著者の冗談も随所に入っていて、面白くていい本です。

英語版はPDFが無料で公開されています。よろしければ!

Introducing Python

文字列のオフセットと置換

  • 2.3.6 []による文字の抽出
  • 2.3.13 replace()による置換

文字列はイミュータブルなので、変更することはできない。

>>> str = 'hoge'
>>> str.replace('h', 'f')
'foge'
>>> str
'hoge'

>>> str[0] = 'f'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

文字列の結合・分割関数

  • 2.3.9 split()による分割
  • 2.3.10 join()による結合

文字列関数の紹介時にセットで記述されていることが多いですが、joinの処理対象と引数の順番が気持ち悪いという意見があるようです。書籍にも逆のような感じがすると書かれてますし、僕も少々違和感があります。

これは処理対象の文字列型であるということを考えると納得できます。

ちなみにこの説明をネットで見たのですが、どのサイトだったか忘れてしまいました。すみません…

splitは処理対象と引数が文字列です。

>>> str = "hoge is fuga, fuga is hoge"
>>> str.split(",")
['hoge is fuga', ' fuga is hoge']

joinは処理対象が文字列で、引数がリストです。

>>> list = str.split(",")
>>> ",".join(list)
'hoge is fuga, fuga is hoge'

処理対象と引数が逆である場合、joinはリストの関数になってしまいます。どうでしょうか、納得しませんか。僕だけですか、そうですか。

>>> list.join(',')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'

そもそもjoinをリストの関数にしておけば議論が起きなかったのかもしれない。

さいごに

リストと混同して、文字列がイミュータブルと使える関数を毎回検索しているような気がします。

比較表みたいなものを作ればいいかもしれませんね。時間があれば作るかも。

最後までお読みいただきありがとうございました。それじゃ!

入門 Python 3

入門 Python 3