As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

pythonで文字列の先頭文字を大文字にする

結論から capitalize()で文字列の先頭文字を大文字にしたオブジェクトを返せます。

>>> str.capitalize()
'Test'

こんにちは。

「はじめてのpython」でpythonの勉強をしている続きです。python基礎です。 Amazon:はじめてのpython

文字列の操作をしたときに返ってくるのは別のオブジェクトということは前回知りました。 mokicks.hatenablog.com

つまり、文字列は不変性を持つオブジェクトです。

そして文字列もオブジェクトなのでいくつかメソッドを持っています。

文字列がもつメソッドをつかっても返ってくるのは別のオブジェクトなのです。

たとえば upperメソッド 使った場合だと

>>> str = 'test'
>>> str.upper()
'TEST'
>>> str
'test'
>>> 

こんな感じで元の変数strは何も操作されていない状態のままです。

文字列の操作として文字列の先頭を大文字にしたいときはどうすれば良いのでしょうか?

upperメソッドを使っても返ってくるのは別のオブジェクトですから、返ってきたオブジェクトを変数に代入して元の文字列のオブジェクトと結合すれば良いのだ!という結論になりました。

>>> str = 'test'
>>> tmp = str.upper() #tmpに'TEST'を代入
>>> str = tmp[0] + str[1:]
>>> str
'Test'

う〜んわざわざtmp邪魔だなぁ〜

文字列のシーケンスの各要素にメソッドを実行できないものかねぇ〜

できました。

>>> str = 'test'
>>> str = str[0].upper() + str[1:]
>>> str
'Test'

インデックスを指定して特定の要素(ここでいうstr[0] = t)に対して操作をしているように見えるがpythonが扱っているオブジェクトは文字列のオブジェクトなんだぁ〜

これで無事文字列の先頭を大文字にすることができました。

不変性をもつオブジェクトに対して変更を加えているのではなく、オブジェクトを操作して同じオブジェクトに代入することでオブジェクトに変更を加えているようにできるのですね!

ちなみにcapitalize()で文字列の先頭文字を大文字にしたオブジェクトを返せます。

>>> str.capitalize()
'Test'